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

Reply via email to