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
>

Reply via email to