On 09/24/2010 03:16 PM, Hadrian Zbarcea wrote:
> That's a bit extreme, but yes, that's the idea. More precisely, not when you 
> want to change the Exchange, you cannot do that, but when you want the 
> message processed by the remaining of the route to be different.
>
> One more thing to keep in mind is that there are 2 kinds of "headers", we 
> call them headers and properties. The headers are on the message, and 
> normally re not propagated. That means that if you produce and out, that will 
> have it's own headers, and if you want headers from the original in to be 
> propagated it's up to you copy them into the new message. The properties are 
> on the Exchange, and they do get propagated, regardless of a Processor 
> producing an out or not. That's for instance the place for security 
> credentials, etc.
>
> Not to self: since a picture is worth 1000 words, we need better diagrams on 
> the camel site.
Thanks for the clarification. I would love to se a pointer in the getIn
and getOut javadocs to a more detailed discussion about the differences
of the two, for example in the package file. Would that be possible?

Regards,
Tarjei


> Cheers,
> Hadrian
>
>
> On Sep 24, 2010, at 9:03 AM, Tarjei Huse wrote:
>
>> Hi,
>> On 09/24/2010 10:36 AM, Claus Ibsen wrote:
>>> 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
>> Maybe the FAQ item could be flashed out with something like:
>>
>> getIn and getOut are not related to the messaging style used.
>>
>> You should only use getOut() when you change the exchange completely and
>> want all traces of the incomming message (headers etc) removed.
>>
>> ?
>> T
>>
>>>>> /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
>>>>
>>>
>>
>> -- 
>> Regards / Med vennlig hilsen
>> Tarjei Huse
>> Mobil: 920 63 413
>>


-- 
Regards / Med vennlig hilsen
Tarjei Huse
Mobil: 920 63 413

Reply via email to