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 Fri, 24 Sep 2010 08:36:42 GMT
On Fri, Sep 24, 2010 at 10:27 AM, Claus Ibsen <claus.ibsen@gmail.com> wrote:
> On Tue, Sep 14, 2010 at 2:29 PM, Bengt Rodehav <bengt@rodehav.com> wrote:
>> Yeah I remember reading about the problems with losing message headers
>> somewhere on this list...
>>
>> To be perfectly honest I think that the number of mails on this thread
>> indicates the importance of documenting these rules and how things work.
>> Claus, you are most definitely the man to do it. I've got your book (haven't
>> read the last updates though) and it certainly warrants a place there.
>> Perhaps it should also be on the wiki somewhere.
>>
>
> We have added information about this in Camel in action,
> chapter 3 when we drill down and work the Processor which exposes the
> Exchange API.
>

I also added a couple of FAQs as well, such as
https://cwiki.apache.org/confluence/display/CAMEL/Using+getIn+or+getOut+methods+on+Exchange

>
>> /Bengt
>>
>> 2010/9/14 Claus Ibsen <claus.ibsen@gmail.com>
>>
>>> On Tue, Sep 14, 2010 at 2:16 PM, Bengt Rodehav <bengt@rodehav.com> wrote:
>>> > I think that was very useful information. I hadn't thought of a Processor
>>> as
>>> > very low level - it's definitely a level that a lot of us will use. Then
>>> I
>>> > guess that in some circumstances (like when coding a custom processor)
>>> you
>>> > need to set the out messsage if the MEP is "out capable" otherwise you
>>> just
>>> > set the in message. Are there more situations where this is needed?
>>> >
>>>
>>> If the MEP is out capable you can still just change the IN message.
>>> If the OUT is null, then Camel will re-use the IN (which you just
>>> changed) and thus still route whatever you have changed.
>>>
>>> You only need to use OUT if you want to create a totally 100% new
>>> message which is not related to the IN message at all.
>>> And this is only needed in special cases.
>>>
>>> Otherwise you get the problem with: Why do I lose my message headers etc.
>>>
>>>
>>>
>>> > I think that this subject is definitely complicated enough to warrant a
>>> good
>>> > documentation somewhere. I think it's really important for developers to
>>> > understand core concepts instead of just using boilerplate samples
>>> (although
>>> > they are very useful).
>>> >
>>> > /Bengt
>>> >
>>> > 2010/9/14 Claus Ibsen <claus.ibsen@gmail.com>
>>> >
>>> >> 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
>>> >>
>>> >
>>>
>>>
>>>
>>> --
>>> 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
>>>
>>
>
>
>
> --
> 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
>



-- 
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