Thanks Claus, Does that mean it's not currently possible to run this set of routes with multiple failures? Is there any way to workaround it?
Thanks Jim On Tue, May 17, 2011 at 10:59:36AM +0200, Claus Ibsen wrote: > Hi > > I have created a ticket to fix that class cast exception > https://issues.apache.org/jira/browse/CAMEL-3979 > > On Tue, May 17, 2011 at 10:46 AM, James Talbut <[email protected]> > wrote: > > 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 > > > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: [email protected] > Web: http://fusesource.com > CamelOne 2011: http://fusesource.com/camelone2011/ > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/
