Details
-
Bug
-
Resolution: Won't Do
-
Major
-
fuse-7.6-GA
-
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&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)