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

Reply via email to