Hi Claus, thanks for providing a fix for this problem. The fix is available for 3.6.x codeline. We are running on 2.25.x codeline. Is there a chance to get a patch for 2.x as well?
I picked the change in our codeline and found that there is adapt()-method used, that is not available in 2.25: exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(true); https://github.com/apache/camel/commit/4cd127eef9f919b36dc761fc495e284e5582663c#diff-9e035215aa8ee92dbb890dc7fe58f4159deb5f2ccf95ed981b0d2b0ed044e8e9R817 Thanks in advance & Best regards, Manuel -----Original Message----- From: Shenavai, Manuel <manuel.shena...@sap.com> Sent: Freitag, 9. Oktober 2020 14:47 To: users@camel.apache.org Subject: [CAUTION] RE: OnException and StreamCaching Hi Claus, thanks for confirming. I created a Jira for it: https://issues.apache.org/jira/browse/CAMEL-15665 Best regards, Manuel -----Original Message----- From: Claus Ibsen <claus.ib...@gmail.com> Sent: Freitag, 9. Oktober 2020 13:52 To: users@camel.apache.org Subject: Re: OnException and StreamCaching Hi Ah thanks for bringing this up. Yeah its a little bug, we should make that stream caching more robust. You are welcome to create a JIRA On Wed, Oct 7, 2020 at 4:07 PM Shenavai, Manuel <manuel.shena...@sap.com> wrote: > > Hi everyone, > > > > we are using the Camel-onException error handling and found that the > exception-handling is sometimes not executed in case of error. When > StreamCaching is enabled in the route and an error happens during > TypeConversion (see stacktrace below), the exception handling is not executed > but the process just fails. I attached a scenario to reproduce the problem to > this mail (ExceptionHandling.java). > > > > Is this the expected behavior? If yes, is there a way to make sure that the > exception-handling is executed anyways? > > > > Thanks in advance & > > Best regards, > > Manuel > > > > > > > > org.apache.camel.CamelExecutionException: Exception occurred during execution > on the exchange: Exchange[ID-WDFN34732556A-60796-1602075170410-0-2] > > > > at > org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1706) > > at > org.apache.camel.util.ExchangeHelper.extractResultBody(ExchangeHelper.java:660) > > at > org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:471) > > at > org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:467) > > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:139) > > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:359) > > at > parserException.ExceptionHandling.sendMessage(ExceptionHandling.java:28) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) > > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) > > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) > > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) > > at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) > > at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) > > at org.junit.rules.RunRules.evaluate(RunRules.java:20) > > at > org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) > > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) > > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) > > at > org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) > > at > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) > > at > org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) > > at > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) > > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:309) > > at org.junit.runner.JUnitCore.run(JUnitCore.java:160) > > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > > at > com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) > > at > com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) > > at > com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) > > Caused by: org.apache.camel.TypeConversionException: Error during type > conversion from type: java.lang.String to the required type: > org.apache.camel.StreamCache with value > org.apache.camel.component.cxf.CxfPayload@36328d33 due > java.lang.ClassCastException: java.lang.String cannot be cast to > javax.xml.transform.Source > > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:629) > > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:150) > > at > org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.java:111) > > at > org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:78) > > at > org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:53) > > at > org.apache.camel.impl.DefaultStreamCachingStrategy.cache(DefaultStreamCachingStrategy.java:189) > > at > org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.before(CamelInternalProcessor.java:788) > > at > org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.before(CamelInternalProcessor.java:767) > > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:145) > > at > org.apache.camel.processor.Pipeline.process(Pipeline.java:121) > > at > org.apache.camel.processor.Pipeline.process(Pipeline.java:83) > > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) > > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62) > > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) > > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) > > at > org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68) > > at > org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:412) > > at > org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:380) > > at > org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:270) > > at > org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:380) > > at > org.apache.camel.impl.ProducerCache.send(ProducerCache.java:221) > > at > org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:124) > > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:137) > > ... 30 more > > Caused by: org.apache.camel.RuntimeCamelException: > java.lang.ClassCastException: java.lang.String cannot be cast to > javax.xml.transform.Source > > at > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1690) > > at > org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1285) > > at > org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59) > > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:306) > > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:133) > > ... 51 more > > Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to > javax.xml.transform.Source > > at > org.apache.camel.component.cxf.converter.CachedCxfPayload.<init>(CachedCxfPayload.java:50) > > at > org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToStreamCache(CxfPayloadConverter.java:118) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at > org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1281) > > ... 54 more -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2