Hi Willem,

In my case the entry point is a cxfEndpoint. My route looks
like the following:

from("cxf:bean:routerEndpoint?dataFormat=MESSAGE").
                processRef("uniqueIDProcessor").
                processRef("decryptProcessor").
                processRef("idProcessor").
                processRef("messageStoreProcessor").
                processRef("logProcessor").
                choice().
                    when().
                        method("endpointSelector", "matches").
                        to("bean:invokeProcessor").
                    otherwise().
                        to("cxf:bean:localEndpoint?dataFormat=MESSAGE");

I have to return the contentType/contentEncoding from the localEndpoint through
the routerEndpoint back to the client. This worked until camel 1.6

In the method CxfHeaderHelper.propagateCxfToCamel() there is a try to copy
the CONTENT_TYPE but it can't be found because it doesn't exist in the 
Message-Object
but in the WrappedMessageContext.

I think a solution to my problem would be to write an interceptor for
the routerEndpoint bean and copy the needed headers...
Is there a easier/better solution?

Thanks

Marc



On Tue, 05 May 2009 16:53:06 +0800
Willem Jiang <[email protected]> wrote:

> Hi Marc,
> 
> I'm sorry that I misunderstand your question.
> 
> Since we don't use CXFMessage to store CXF message for better support
> routing the message between cxf and other endpoints, the original CXF
> message context maybe lost between the CXF endpoints.
> 
> If you just want to Camel route work as proxy, you can use camel-jetty
> component to do that, and you can control the http header and the
> content-type by apply your HttpBinding or HeaderFilterStrategy.
> The route rule could like this
> 
> from("jetty://http://localhost:9001/router";).to("http://localhost:9002/helloworld";);
> 
> You can setup the HttpBinding or HeaderFilterStrategy by adding a
> customized JettyComponent in your Spring configuration file.
> 
> <bean id="jetty" class="org.apache.camel.component.jetty.JettyComponent">
>       <property name="Httpbinding">
>               <bean class="YourHTTPBinding"/>                         
>       </property>
>         <property name="HeaderFilterStrategy">
>               <bean class="YourHeaderFilterStrategy"/>                        
>       </property>
>   </bean>
> 
> Willem
> 
> 
> Marc Giger wrote:
> > Hi Willem,
> > 
> > How to get the headers in a route is not the problem but how
> > to send specific headers back to the client. I saw there is a
> > new mechanism in camel 1.6 to filter specific headers. E.g. 
> > CxfHeaderFilterStrategy.
> > How can I apply a customized filter strategy to the spring-declared 
> > endpoints?
> > 
> > Thanks
> > 
> > Marc
> > 
> > 
> > On Tue, 05 May 2009 11:03:32 +0800
> > Willem Jiang <[email protected]> wrote:
> > 
> >> Hi,
> >>
> >> You can get the content-type and response code with below code example
> >> in Camel 1.x .
> >>
> >>  Map context = (Map)exchange.getIn().getHeaders().get("ResponseContext");
> >>         assertNotNull("Expect to get the protocal header ",
> >> context.get("org.apache.cxf.message.Message.PROTOCOL_HEADERS"));
> >> Map protocalHeaders = (Map)
> >> context.context.get("org.apache.cxf.message.Message.PROTOCOL_HEADERS");
> >> String contentType = protocalHeaders.get("content-type");
> >> int responseCode =
> >> context.get("org.apache.cxf.message.Message.RESPONSE_CODE");
> >>
> >> In Camel 2.0, you can get the context-type directly from the message 
> >> header.
> >>
> >> Willem
> >>
> >> Marc Giger wrote:
> >>> Hi all,
> >>>
> >>> I'm missing the content-type http response header in camel-cxf 1.6 
> >>> (cxf:bean:localEndpoint?dataFormat=MESSAGE)
> >>>
> >>> HTTP/1.1 200 OK
> >>> Content-Length: 4648
> >>> Server: Jetty(6.1.10)
> >>>
> >>> or
> >>>
> >>> HTTP/1.1 500 Internal Server Error
> >>> Content-Length: 253
> >>> Server: Jetty(6.1.10)
> >>>
> >>> What do I have to do to get it back?:-)
> >>> I've lost the overview...
> >>>
> >>> Thanks a lot!
> >>>
> >>> Marc
> >>>
> >>>
> > 
> > 


-- 

itServe AG
Marc Giger
Länggassstrasse 26
3000 Bern 9
Tel.: +41 31 305 16 16
Fax:  +41 31 305 16 17

Direkt +41 31 305 43 27
Email [email protected]

http://www.itserve.ch

Reply via email to