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 >> >