My problem seems to be that, with MEP InOnly, a CXF endpoint consuming from a queue does not "see" an exception that occurs later in the route and therefore commits the consumptions to the queue.
Does anybody know how I can make this exception visible to CXF? I think this should be possible, otherwise it would not be possible to read asynchronous and transacted with CXF from a queue. Thanks Stefan On Wed, Mar 21, 2012 at 17:26, Stefan Burkard <sburk...@gmail.com> wrote: > Hi Willem > > I suspected something like this - I am a Camel beginner and therefore > didn't know if this is a bug or a feature :-) > > My case is to make the following routes transactional: > 1. I am consuming messages with a CXF bean endpoint from an ActiveMQ > queue to get an unmarshalled Exchange (the producer sends - fire and > forget - SOAP messages with mtom attachments to the queue) > 2. I am sending the Exchanges with ".to(direct:...)" to the main route > of my module > 3. The main route processes the Exchanges > > To check how these routes behave under error conditions, I am > injecting intentionally an exception into the direct-endpoint > (to"direct:...") of the first route. Therefore I am getting (as > expected) the exception and afterwards the queue is empty. This means > my route is not secured against message loss. If I understand you > correctly, the exception that occurs during route-processing is not > recoginsed by the CXF-consumer and therefore the consumer commits the > message consumption to the queue. > > So, how can I make this asynchronous SOAP over JMS usecase > transactional so that the message remains in the queue if an error > occurs during route processing? > > Thanks for your help > Stefan > > > On Wed, Mar 21, 2012 at 14:23, Willem Jiang <willem.ji...@gmail.com> wrote: >> If you are using inOnly MEP, camel-cxf producer will not know any thing >> about the exception. >> I'm not sure what kind of error that you get. >> >> >> >> On 3/21/12 5:54 PM, Burkard Stephan wrote: >>> >>> Hello >>> >>> I try to get running a SOAP over JMS usecase with the configuration >>> outlined here: >>> http://camel.apache.org/better-jms-transport-for-cxf-webservice-using-ap >>> ache-camel.html >>> <http://camel.apache.org/better-jms-transport-for-cxf-webservice-using-a >>> pache-camel.html> >>> >>> My webservice is InOnly, it does not respond to requests. The client >>> therefore sends SOAP messages to a queue without waiting for an answer. >>> On the server side camel consumes the messages. >>> >>> I tried to test transaction behaviour of my camel routes with unittests >>> where I advice the route with exceptions that occur at specific >>> entpoints. This works fine when I consume from the queue directly >>> (activemq:queue:...). If an error occurs the message is not commited and >>> it stays in the queue. >>> When I use a CXF endpoint to consume messages (cxf:bean:...), messages >>> are lost when an exception occurs. They seem to be commited in activemq >>> before or despite an error occurs. >>> Therefore I tried to read first from the queue directly, forward the >>> message to a direct endpoint and consume the messages with CXF from the >>> direct endpoint. But in this case the message is also lost if an error >>> occurs after consuming the message with CXF. >>> >>> Before posting routes and configuration details, I just would like to >>> know if this is "normal" behaviour of the CXF endpoint with inOnly MEP >>> or if the messages should stay in the queue as I expect? >>> >>> Perhaps this is the same problem as described in this thread: >>> http://camel.465427.n5.nabble.com/CXF-Camel-JMS-Endpoint-exception-handl >>> ing-td4471175.html >>> <http://camel.465427.n5.nabble.com/CXF-Camel-JMS-Endpoint-exception-hand >>> ling-td4471175.html> ? >>> >>> Thanks for your help >>> Stefan >>> >> >> >> -- >> Willem >> ---------------------------------- >> FuseSource >> Web: http://www.fusesource.com >> Blog: http://willemjiang.blogspot.com (English) >> http://jnn.javaeye.com (Chinese) >> Twitter: willemjiang >> Weibo: willemjiang