Hi,
I created CAMEL-6393 to describe the change proposed.
regards, aki

2013/5/17 Aki Yoshida <[email protected]>

> Hi Claus,
> so the http component assumes always a list of string as its header value?
>
> camel-cxf seems to currently always assume a string entry (there is a
> casting code like (String)camelHeaders.get(...) in DefaultCxfBinding. And
> maybe there are other existing code that assume the string header value in
> camel-cxf scenarios. So, we probably can't switch to the list value
> directly.
>
> I think we would need to provide a configuration option for camel-cxf to
> decide whether to propagate a list directly or converting its entries to a
> string. In that case, if this option is not set, we should create a string
> value using the conversion rule defined in HTTP 1.1 spec, section 4.2,
> converting multiple header fields into a single header field.
>
> We could also provide an additional option for the current behavior,
> namely propagating only the first entry. But this behavior is achieved with
> the string conversion rule when the list has one value, which is the
> typical case. So, I don't think we need to add this option to make it more
> complicated.
>
> How do you think?
>
> regards, aki
>
> 2013/5/10 Claus Ibsen <[email protected]>
>
>> Hi Aki
>>
>> Yeah it should add those values as a List when if you add a 2nd value
>> to the same key.
>> We do the same in http based components
>>
>> See the appendHeaders method on
>>
>> https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob;f=components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java;h=e98f2bb75087cca8e4a02efcb61888c2804bfaa5;hb=HEAD
>>
>> We could consider having such a method in camel-core in a
>> MessageHelper util class or something.
>>
>> On Wed, May 8, 2013 at 12:45 AM, Aki Yoshida <[email protected]> wrote:
>> > We have a header entry that has multiple entries that are in the
>> response
>> > HTTP message. These multiple entries are available in CXF, as each
>> header
>> > value is represented as a list. However, when this message is propagated
>> > back to camel, only the first entry of this list is read into the camel
>> > message's headers.
>> >
>> > Looking at the current camel-cxf code in trunk as shown below, I don't
>> see
>> > an available option to propagate multiple entries back into the camel's
>> > message header.
>> >
>> >         // Copy the CXF protocol headers to the camel headers
>> >         Map<String, List<String>> cxfHeaders =
>> >             CastUtils.cast((Map<?,
>> > ?>)message.get(Message.PROTOCOL_HEADERS));
>> >         if (cxfHeaders != null) {
>> >             for (Map.Entry<String, List<String>> entry :
>> > cxfHeaders.entrySet()) {
>> >                 if
>> (!strategy.applyFilterToExternalHeaders(entry.getKey(),
>> > entry.getValue(), exchange)) {
>> >                     headers.put(entry.getKey(),
>> entry.getValue().get(0));
>> >                 }
>> >             }
>> >         }
>> >
>> > Is this assumption correct and if so, has there been some work on how to
>> > get the multiple entries propagate back to camel? I can think of several
>> > strategy/options to not to break the existing applications and I was
>> > wondering if we can add such an option.
>> >
>> > I appreciate for your advice.
>> >
>> > regards, aki.
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> Red Hat, Inc.
>> FuseSource is now part of Red Hat
>> Email: [email protected]
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>
>
>

Reply via email to