Hi,
I've got the following three routes:
<camel:camelContext id="sampleHashCamelContext" >
<camel:route>
<camel:from uri="cxf:bean:serviceEndpoint" />
<camel:transacted />
<camel:to uri="activemq:queue:SampleAsyncHashCamelQueue" pattern="InOnly"
/>
</camel:route>
<camel:route streamCache="true" handleFault="false">
<camel:from uri="activemq:queue:SampleAsyncHashCamelQueue" />
<camel:transacted />
<camel:loadBalance>
<camel:roundRobin />
<camel:to uri="cxf:bean:targetEndpoint1"/>
<camel:to uri="cxf:bean:targetEndpoint2"/>
<camel:to uri="cxf:bean:targetEndpoint3"/>
</camel:loadBalance>
<camel:to uri="activemq:queue:SampleAsyncHashCamelQueueReply" />
</camel:route>
<camel:route>
<camel:from uri="activemq:queue:SampleAsyncHashCamelQueueReply" />
<camel:transacted />
<camel:to uri="http://192.168.1.100:8080/sampleHashCamelContext"
pattern="InOnly" />
</camel:route>
</camel:camelContext>
In the no-error case everything works perfectly, one of the CXF endpoints gets
called asynchronously and the results get sent to an http endpoint.
To test the error handling I change the CXF endpoints to point to TCP ports
that aren't listening.
When I do this for one endpoint everything continues to work correctly.
When I change two endpoints I get the following error:
Interceptor for {http://spudsoft.co.uk/}Hash#{http://spudsoft.co.uk/}HashFiles
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: org.apache.camel.impl.DefaultMessage cannot
be cast to org.apache.camel.component.jms.JmsMessage
at
org.apache.camel.component.cxf.CxfConsumer$1.checkFailure(CxfConsumer.java:218)[136:org.apache.camel.camel-cxf:2.7.1]
...
Caused by: java.lang.ClassCastException: org.apache.camel.impl.DefaultMessage
cannot be cast to org.apache.camel.component.jms.JmsMessage
at
org.apache.camel.component.jms.JmsProducer.setMessageId(JmsProducer.java:365)[155:org.apache.camel.camel-jms:2.7.1]
...
In the docs for transactional-client there is an example of a similar route
that has to explicitly create a new transaction for the second stage.
Should I be doing this?
If so, how does camel know that it should wrap the three routes in a single
transaction (i.e. if something else were to dequeue messages wouldn't that
leave the
transaction hanging?)
If I don't need to explicitly declare transaction policies, what is causing the
error?
Thanks.
Jim