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

Solution Verified - Updated -

Issue

If there are multiple camel 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

Environment

  • Red Hat Fuse 7

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content