Hi William, How about we store these Content-Type with the same key: "CamelConentType"?
In this way we don't need to write a long check list for looking up the Content-Type in the Camel message header. Any thought? Willem William Tam wrote: > 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 >>>>> >>> >