Hi Sergey,

> so I'll try to write one and see what happens.

Sorry for the late reply. I tried this again with the recent snapshot and the headers are still lost unless I abort the interceptor chain.

The implementation I have extends AbstractPhaseInterceptor<Message>. Phase is at Phase.POST_PROTOCOL. Code to set the header is as follows:

Map<String, List<String>> responseHeaders = (Map<String, List<String>>)message.get(Message.PROTOCOL_HEADERS); if (responseHeaders == null) {
           responseHeaders = new HashMap<String, List<String>>();
           message.put(Message.PROTOCOL_HEADERS, responseHeaders);
       }
responseHeaders.put("header1", Arrays.asList(new String[]{"headerValue"}));
       logger.debug("out message headers: " + responseHeaders);

then I do something similar to what was done here:

http://www.nabble.com/-OutInterceptor--HttpHeader--Adding-Authorization-Info-entry-to-http-header-td20375003.html

On the other hand, I was able to successfully retain the headers using a ResponseHandler implementation with the following statement:

       MultivaluedMap<String, Object> map = response.getMetadata();
       map.add("header1", "headerValue");
//I think it is worth noting in the docs it is this easy to modify the headers :D

So I guess I will be using the the ResponseHandler from now on. At least for header post-processing.

One thing though, with messages the expected value for headers is a List<String>, while with Response it is just String. Would it be possible to adjust one so they would expect the same object?

Again, my thanks.

Gabo

Sergey Beryozkin wrote:
Hi Gabo

Hi Sergey,

Is there a resource that shows how the filter is integrated with the rest of the application? I mean, where do I state that I want this filter used, i.e. how would the spring configuration file look like?

I've updated the documentation a bit to show how filters can be configured from Spring. As they're considered as JAXRS providres by CXF JAXRS runtime, they're registered the same way as other JAXRS providers (message body readers/writers, exception mappers. context handlers, etc)



As of now, what I did is to set the phase at POST_PROTOCOL and force the chain to abort and flush whatever it already currently has. I'm thinking that skipping the USER_ and POST_ STREAM is not a good idea, no? Does the trick tho.

I guess what I don't understand is whether your POST_PROTOCOL CXF interceptor invoked before JAXRSOutInterceptor or after. My understanding is that it has to be invoked after, so I don't get why the headers are lost if a message is not aborted and preserved if it is. Perhaps AbstractHttpDestination swallows custom headers ? but we do have tests confirming it's not...I don't have tests at the moment involving JAXRS and CXF interceptors, so I'll try to write one and see what happens.

Cheers, Sergey

Reply via email to