Hi,

I just found the CamelTransportContants.CONTENT_TYPE is used by the
CamelTransport.
The integration test of CustomerServicesTest shows the user case.

Since there is no protocol header defined in Camel-xxx component, camel
transport need to copy the content-type between the CXF message and
Camel message back and forth.

Since the DefaultCxfBinding will not be used in CamelTranpsort, I just
revert the change of the CXFHeaderHelper.

Willem



William Tam wrote:
> On Wed, May 6, 2009 at 11:55 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>> On Thu, May 7, 2009 at 5:02 AM, William Tam <email.w...@gmail.com> wrote:
>>> On Wed, May 6, 2009 at 9:57 PM, Willem Jiang <willem.ji...@gmail.com> wrote:
>>>> Hi William,
>>>>
>>>> Since the JMS can't accept the header which's name has the '-'
>>>> character, we introduce the CamelTransportContants.CONTENT_TYPE for it.
>>> I thought JMS could not handle dots in header names (that's why we
>>> went from org.apache.camel convention to CamelHeaderName "case"
>>> convention).  My memory may be wrong.
>> Hi
>>
>> In Camel 2.0 we have added to the JMS component so it will be able to
>> transfer Content-Type with the hyphen, as its a common header.
>> If you use Camel on both sides then it will automatic revert it back
>> to normal again. It replaces - with a _HYPHEN_ constant. So its
>> transfered as Content_HYPHEN_Type.
> 
> In 2.0, does that mean it is OK to have hyphen in header?  If so, we
> could clean up CamelTransportContants.CONTENT_TYPE?
> 
>>>> After checking the on wire message between the client and CXF consumer,
>>>> I found there are two lines of "content-type" in the http header.
>>>> One is "content-type", the other is "Content-Type".
>>> The comment in code is kinda off.
>>>
>>>> So I added the filter of "content-type", and keep using "content.type"
>>>> in the Camel message.
>>>>
>>>> Willem
>>>>
>>>>
>>>> William Tam wrote:
>>>>> Hi Willem,
>>>>>
>>>>> I don't think adding "content-type" to the filters is necessary.
>>>>> 1. The header is "Content-Type" not "content-type",  so the change
>>>>> does not really affect anything.
>>>>> 2. Putting that aside.  If we add filters for "Content-Type", it stops
>>>>> the propagating from Camel header to/from CXF header, which we don't
>>>>> want.
>>>>>
>>>>> We probably should clean up the use of
>>>>> CamelTransportContants.CONTENT_TYPE (value = content.type) and just
>>>>> use Message.CONTENT_TYPE (value  = Content-Type).
>>>>>
>>>>> In DefaultCxfBinding.java, I don't see why we need to invent a header
>>>>> constant (CamelTransportContants.CONTENT_TYPE) only used by camel-cxf
>>>>> and have to map it back and forth.
>>>>>
>>>>>
>>>>> That is, we can eliminate CamelTransportContants.CONTENT_TYPE and use
>>>>> Message.CONTENT_TYPE consistently in:
>>>>>
>>>>>         // propagate content type
>>>>>         String key = Message.CONTENT_TYPE;
>>>>>         Object value = cxfMessage.get(key);
>>>>>         if (value != null &&
>>>>> !headerFilterStrategy.applyFilterToExternalHeaders(key, value,
>>>>> exchange)) {
>>>>>             camelHeaders.put(CamelTransportConstants.CONTENT_TYPE, value);
>>>>>             if (LOG.isTraceEnabled()) {
>>>>>                 LOG.trace("Populate header from CXF header=" + key + "
>>>>> value=" + value);
>>>>>             }
>>>>>         }
>>>>>
>>>>> ...
>>>>>             // put content type in exchange
>>>>>             if 
>>>>> (CamelTransportConstants.CONTENT_TYPE.equals(entry.getKey())) {
>>>>>                 cxfExchange.put(Message.CONTENT_TYPE, entry.getValue());
>>>>>                 continue;
>>>>>             }
>>>>>
>>>>> Thoughts?
>>>>>
>>>>> ==============================================================================
>>>>>> --- 
>>>>>> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfHeaderFilterStrategy.java
>>>>>>  (original)
>>>>>> +++ 
>>>>>> camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfHeaderFilterStrategy.java
>>>>>>  Wed May  6 04:56:14 2009
>>>>>> @@ -63,6 +63,11 @@
>>>>>>         getOutFilter().add(Message.PROTOCOL_HEADERS);
>>>>>>         getInFilter().add(Message.PROTOCOL_HEADERS);
>>>>>>
>>>>>> +        // Since the DefaultCxfBinding deal with the content-type 
>>>>>> separately.
>>>>>> +        // We need to filter this header
>>>>>> +        getOutFilter().add("content-type");
>>>>>> +        getInFilter().add("content-type");
>>>>>> +
>>>>>>         // initialize message header filter map with default SOAP filter
>>>>>>         messageHeaderFiltersMap = new HashMap<String, 
>>>>>> MessageHeaderFilter>();
>>>>>>         addToMessageHeaderFilterMap(new SoapMessageHeaderFilter());
>>>>>>
>>>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>> Apache Camel Reference Card:
>> http://refcardz.dzone.com/refcardz/enterprise-integration
>> Interview with me:
>> http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress
>>
> 

Reply via email to