HI David

On Tue, Apr 26, 2011 at 12:02 AM, KARR, DAVID (ATTSI) <[email protected]> wrote:
> If I send a request to my service without setting the "Accept" header, I get 
> XML back.  In the service, I check "acceptableMediaTypes", and it's 
> "application/xml".
>
> If I set the "Accept" request header to "application/json", I get JSON back.  
> In the service, I check "acceptableMediaTypes", and it's "application/json".
>
> I set the "_type" query parameter to "json", I get JSON back.  In the 
> service, I check "acceptableMediaTypes", and it's "application/json".
>
> Everything's fine so far.  The next test has the problem.
>
> I have an interceptor that looks for certain query parameters and translates 
> them to header parameters.  One of the keys it looks for is "Accept".  I set 
> the "Accept" query parameter to "application/json".  I watched my interceptor 
> execute the following line:
>
>    ((Map<String, List<String>>) 
> inMessage.get(Message.PROTOCOL_HEADERS)).put(key, list);
>
> Where "key" was "Accept", and "list" was a one-element list containing the 
> value "application/json".
>
> Inside the service, I printed the value of "acceptableMediaTypes", and it's 
> "application/json".
>
> However, when the service rendered the response, it was XML, not JSON.
>

In the interceptor, please also do:

message.put(Message.ACCEPT_CONTENT_TYPE, "application/json");

It's a bit of duplication, but CXF HTTP transport does do it too
(probably to text/xml by default). It is an issue that JAX-RS frontend
assumes that  Message.ACCEPT_CONTENT_TYPE is always set and thus
ignores the value available in the map, that can bee improved - but
adding the above line should make it all work for you

Cheers, Sergey

> What could I be missing?
>

Reply via email to