Uploaded image for project: 'Red Hat Fuse'
  1. Red Hat Fuse
  2. ENTESB-14327

Multiple use of LogProcessor does not work as expected with camel-http4 consumer endpoint

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Major
    • fuse-7.8-GA
    • fuse-7.6-GA
    • Camel
    • None
    • CEE
    • % %
    • Fuse Standalone

    Description

      If there are multiple LogProcessor after camel-http4 consumer endpoint, 2nd LogProcessor throws TypeConversionException.

      camel route

      <route id="_route2">
          <from id="_to1" uri="timer:timerName?repeatCount=1"/>
          <to id="_to2" uri="http4://localhost:9000/demo/1?disableStreamCache=true&amp;bridgeEndpoint=true"/>
          <log id="_log1" message="Read body 1st time: ${body}"/>
          <log id="_log2" message="Read body 2nd time: ${body}"/>
      </route>
      

      log

      [ Blueprint Event Dispatcher: 1] BlueprintCamelContext          INFO  Apache Camel 2.21.0.fuse-760027-redhat-00001 (CamelContext: _context1) started in 0.667 seconds
      [ thread #4 - timer://timerName] _route2                        INFO  Read body 1st time: "3000"
      [ thread #4 - timer://timerName] DefaultErrorHandler            ERROR Failed delivery for (MessageId: ID-unused-220-201-nrt-redhat-com-1594771676451-0-4 on ExchangeId: ID-unused-220-201-nrt-redhat-com-1594771676451-0-1). Exhausted after delivery attempt: 1 caught: org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.io.InputStream] due Attempted read on closed stream.
      
      Message History
      ---------------------------------------------------------------------------------------------------------------------------------------
      RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
      [_route2           ] [_route2           ] [timer://timerName?repeatCount=1                                               ] [       378]
      [_route2           ] [_to2              ] [http4://localhost:9000/demo/1?disableStreamCache=true&bridgeEndpoint=true     ] [       375]
      [_route2           ] [_log1             ] [log                                                                           ] [         0]
      [_route2           ] [_log2             ] [log                                                                           ] [         1]
      
      Stacktrace
      ---------------------------------------------------------------------------------------------------------------------------------------
      org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.io.InputStream] due Attempted read on closed stream.
      	at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:667)
      	at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:158)
      	at org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.java:120)
      	at org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:41)
      	at org.apache.camel.builder.ExpressionBuilder$76.evaluate(ExpressionBuilder.java:1836)
      	at org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)
      	at org.apache.camel.processor.LogProcessor.process(LogProcessor.java:64)
      	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      	at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
      	at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      	at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197)
      	at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79)
      	at java.util.TimerThread.mainLoop(Timer.java:555)
      	at java.util.TimerThread.run(Timer.java:505)
      Caused by: java.io.IOException: Attempted read on closed stream.
      	at org.apache.http.conn.EofSensorInputStream.isReadAllowed(EofSensorInputStream.java:107)
      	at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:133)
      	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
      	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
      	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
      	at java.io.InputStreamReader.read(InputStreamReader.java:184)
      	at java.io.BufferedReader.fill(BufferedReader.java:161)
      	at java.io.BufferedReader.read1(BufferedReader.java:212)
      	at java.io.BufferedReader.read(BufferedReader.java:286)
      	at java.io.Reader.read(Reader.java:140)
      	at org.apache.camel.converter.IOConverter.toString(IOConverter.java:303)
      	at org.apache.camel.converter.IOConverter.toString(IOConverter.java:293)
      	at org.apache.camel.converter.IOConverter.toString(IOConverter.java:350)
      	at org.apache.camel.converter.IOConverterOptimised.convertTo(IOConverterOptimised.java:118)
      	at org.apache.camel.impl.converter.OptimisedTypeConverter.convertTo(OptimisedTypeConverter.java:63)
      	at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:300)
      	at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:141)
      	... 14 more
      

      It seems like the camel converter closed the InputStream automatically in the fist invocation by LogProcessor. So the camel converter could not read the closed InputStream at the second invocation by LogProcessor.

      Steps to Reproduce The Issue

      • download the attachment
      • Import the archived project by CodeReady Studio
      • Run As Local Camel Context (without test)

      Attachments

        Activity

          People

            rnetuka@redhat.com Radovan Netuka
            rhn-support-hfuruich Hisao Furuichi
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: