Hi everyone,
I have a question related to camel
onCompletion<https://camel.apache.org/manual/latest/oncompletion.html>. I like
to perform some actions after a exchange has been completed. I found two ways
to do so:
1.
Exchange.addOnCompletion<https://www.javadoc.io/doc/org.apache.camel/camel-core/2.21.0/org/apache/camel/Exchange.html#addOnCompletion-org.apache.camel.spi.Synchronization->
2. <onCompletion> in blueprint xml, i.e.:
<camel:route streamCache="true">
<camel:from uri="cxf:bean:clientEndpointWSProvider"/>
<camel:onCompletion>
<camel:process ref="exchangeCompletedHandler"/>
</camel:onCompletion>
...
</camel:route>
Can you recommend one approach over the other? Is there any significant
difference between the solutions? The background of my questions is, that I
experienced problems with solution 2) when StreamCaching was enabled in the
camel route. However, with solution 1) the problem did not occur. I attached
the stacktrace of the problem to this mail. I can also provide a project to
reproduce the problem if required.
Thanks in advance
Best regards,
Manuel
org.apache.camel.RuntimeCamelException: java.lang.IllegalStateException:
Current event not START_ELEMENT or END_ELEMENT
at
org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
at
org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1405)
at
org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59)
at
org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:325)
at
org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:140)
at
org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.java:120)
at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:87)
at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:61)
at
org.apache.camel.impl.DefaultStreamCachingStrategy.cache(DefaultStreamCachingStrategy.java:199)
at
org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.before(CamelInternalProcessor.java:810)
at
org.apache.camel.processor.CamelInternalProcessor$StreamCachingAdvice.before(CamelInternalProcessor.java:789)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:149)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
at
org.apache.camel.processor.OnCompletionProcessor.doProcess(OnCompletionProcessor.java:153)
at
org.apache.camel.processor.OnCompletionProcessor$OnCompletionSynchronizationAfterConsumer.onComplete(OnCompletionProcessor.java:253)
at
org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:104)
at
org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:243)
at
org.apache.camel.util.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.java:65)
at
org.apache.camel.component.cxf.util.CxfUtils.closeCamelUnitOfWork(CxfUtils.java:182)
at
org.apache.camel.component.cxf.interceptors.UnitOfWorkCloserInterceptor.handleMessage(UnitOfWorkCloserInterceptor.java:52)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:90)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:247)
at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:79)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:190)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:500)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:560)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:914)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Current event not START_ELEMENT or
END_ELEMENT
at
com.ctc.wstx.sr.BasicStreamReader.getNamespaceCount(BasicStreamReader.java:802)
at
org.apache.cxf.staxutils.DepthXMLStreamReader.getNamespaceCount(DepthXMLStreamReader.java:122)
at
org.apache.cxf.staxutils.DepthXMLStreamReader.getNamespaceCount(DepthXMLStreamReader.java:122)
at
org.apache.camel.component.cxf.converter.DelegatingXMLStreamReader.<init>(DelegatingXMLStreamReader.java:44)
at
org.apache.camel.component.cxf.converter.CachedCxfPayload.<init>(CachedCxfPayload.java:67)
at
org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToStreamCache(CxfPayloadConverter.java:119)
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:1401)
... 45 more