Hi Willem, I think you meant CxfHeaderHelper rather than CamelTransport. I saw your checkin. Changing the header name from "content.type" to "CamelContentType" is fine, although it is not consistent with DefaultCxfBinding where it just uses header name "Content-Type". Also, should it be "CamelCxfContentType"? BTW, there is a CamelHttpContentType in HTTP component, and one (CamelRestletMediaType) for Restlet component. They are have same semantics.
Cheers, William On Fri, May 8, 2009 at 10:36 AM, William Tam <email.w...@gmail.com> wrote: > I couldn't find where CamelTransport is referencing > CamelTransportContants.CONTENT_TYPE. Even if it is referenced, I > don't understand why we can have to use the constant of value > "content.type". > > On Fri, May 8, 2009 at 3:56 AM, Willem Jiang <willem.ji...@gmail.com> wrote: >> 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 >>>> >>> >> >> >