camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Camel Exchange Patters
Date Tue, 14 Sep 2010 09:14:05 GMT
On Tue, Sep 14, 2010 at 10:23 AM, Christian Müller
<christian.mueller@gmail.com> wrote:
> Hello Claus!
>
> That's not (in my opinion) how it works currently. At present I work on a
> route which looks like this:
>
> errorHandler(
>  defaultErrorHandler()
>    .retryAttemptedLogLevel(LoggingLevel.DEBUG)
>    .retriesExhaustedLogLevel(LoggingLevel.INFO));
>
> onException(IllegalArgumentException.class)
>  .handled(true)
>  .maximumRedeliveries(0)
>  .beanRef("myResultProvider", "failureResponse");
>
> from("cxf:bean:MyCoolService")
>  .processRef("myValidator") // validates conditional rules
>  .inOut("direct:mySubroute")
>  .beanRef("myResultProvider", "successResponse")
>
>
> If my validator throws a IllegalArgumentException and the result provider
> writes the response into the in message, the web service will return null.
> But if I write the response into the out message, the web service will
> return it. So, I changes my bean to the following "pattern":
>

Well that could CXF Bean component having a bug.

If you decide to use a Processor and work on Exchange then you use the
low level Camel API and then you have to handle the IN/OUT stuff
yourself.




> if (exchange.getPattern().isOutCapable()) {
>  exchange.getOut().setBody(response);
> } else {
>  exchange.getIn().setBody(response);
> }
>
> And that's the same how the org.apache.camel.processor.ConvertBodyProcessor
> works (I know you know this, but for the other guys.. :o) )
>
> public class ConvertBodyProcessor implements Processor {
> ...
>    public void process(Exchange exchange) throws Exception {
>        Message in = exchange.getIn();
>        if (charset != null) {
>            exchange.setProperty(Exchange.CHARSET_NAME, charset);
>        }
>        Object value = in.getMandatoryBody(type);
>
>        if (exchange.getPattern().isOutCapable()) {
>            Message out = exchange.getOut();
>            out.copyFrom(in);
>            out.setBody(value);
>        } else {
>            in.setBody(value);
>        }
>    }
> ...
> }
>
> Should our custom processors/beans/.. not work in the same way?
>
> Cheers,
> Christian
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Mime
View raw message