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. > > 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()); >>> >> > >