On Fri, Sep 24, 2010 at 1:55 PM, Daniel Bevenius
<daniel.beven...@gmail.com> wrote:
>>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 just took a look but could not find such information in chapter 3. But
> perhaps this version of the book has yet to be released?
>

Yeah the chapters are in copy editing and a new MEAP will be released
when all this work is done.


> Thanks,
>
> /Daniel
>
> 2010/9/24 Bengt Rodehav <be...@rodehav.com>
>
>> Perfect!
>>
>> /Bengt
>>
>> 2010/9/24 Claus Ibsen <claus.ib...@gmail.com>
>>
>> > On Fri, Sep 24, 2010 at 10:27 AM, Claus Ibsen <claus.ib...@gmail.com>
>> > wrote:
>> > > On Tue, Sep 14, 2010 at 2:29 PM, Bengt Rodehav <be...@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.ib...@gmail.com>
>> > >>
>> > >>> On Tue, Sep 14, 2010 at 2:16 PM, Bengt Rodehav <be...@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.ib...@gmail.com>
>> > >>> >
>> > >>> >> On Tue, Sep 14, 2010 at 10:23 AM, Christian Müller
>> > >>> >> <christian.muel...@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
>> >
>>
>



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

Reply via email to