On Fri, Jan 23, 2009 at 4:45 PM, William Tam <email.w...@gmail.com> wrote:
> On Fri, Jan 23, 2009 at 2:33 AM, Willem Jiang <willem.ji...@gmail.com> wrote:
>> Hi Claus
>>
>> I agree the component should take responsible of copy the In message
>> headers into Out message headers. we could provides util class to do
>> that copy thing in camel-core.
>> But the component should also need to make sure some of the out message
>> header value which is copied from in message should be overrided
>> according components logical.
>>
>> Such as the response context in camel-cxf component message header, it
>> should be overrided when the camel-cxf producer get the response from
>> actual web services.
>>
>
> Hmm ... that means "Pipeline to always add headers from IN to OUT, so
> headers is preserved"
> could be problematic.   I guess, the pipeline needs to make sure it
> does not overwrite headers that already exist in out header.  Still, I
> think component may not want to get involved.
Yeah giving it some thought is like a double edged sword.

What we have stored in Headers today in Camel is both:
- user headers
- and system headers (added by Camel itself).

I am starting to be more and more convinced that we should separate the two.
So any headers that a users has enforced to be set should be kept in
one Map and the others that the components set internally (such as SQL
number of rows returned, or whatnot we have, there are many) in
another Map.

The user headers is always preserved and copied along in the routing.
User can always clear/remove unwanted headers.
The system headers should be short lived as they are not really
useable. So they are "alive" in the next step (process) in the route,
and when the pipeline invokes next route thereafter these information
is cleared.

Separating these will also make the routing/tracing a bit easier as
Users can recognize their own headers instead its mixed with all the
noise the Camel components add.



>
>
>> Just my two cents,
>>
>> Willem
>>
>> Claus Ibsen wrote:
>>> Hi
>>>
>>> The OUT message really starts to irritate me.
>>>
>>> We have various components that set data on the OUT body and then the
>>> Pipeline will use this result as IN for then next node.
>>> What happens is then whatever headers etc from IN is lost. Then you
>>> cant really route and have your headers preserve during the entire
>>> route.
>>>
>>> We might wanna give this a thought in Camel 2.0?
>>> - Pipeline to always add headers from IN to OUT, so headers is preserved
>>> - Components to enforce MEP and only set data on OUT if its InOut
>>> - Components to add headers from IN to OUT if it set OUT as result
>>> and what not
>>>
>>> Currently the SQL component has this flaw. In the past it was
>>> Velocity. And I guess there are some other components as well.
>>>
>>> Just starting a thread to not forget. I only had one cup of coffee
>>> this morning. Going to boil water now.....
>>>
>>>
>>
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Reply via email to