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? >
