Hi,

I have created a JIRA for this issue:

https://issues.apache.org/jira/browse/CXF-1699

I included a patch which fixes the problem for me.

Cheers,
Brad.


On Thu, Jul 10, 2008 at 8:46 PM, Anthony Schexnaildre
<[EMAIL PROTECTED]> wrote:
> I gave it a test with my setup and I get the same result. I have no custom
> providers in place right now either. No matter what headers I set on the
> request or which formats I place in @ProduceMime the response Content-Type
> header is always text/xml. However if I return a Response and set the header
> there it works like it should. See below.
>
> @GET
> @Path("/countries")
> @ProduceMime("application/json")
> public Response listCountries() {
>        Countries countries = new Countries();
>        List<CountryHolder> list = new ArrayList<CountryHolder>();
>        for( Country c: countryDao.fetchAll())
>                list.add(new CountryHolder(c));
>
>        countries.setCountry(list);
>        return Response.ok(countries).header("Content-Type",
> "application/json").build();
> }
>
> I personally like returning a Response object because it gives me the
> opportunity to gently massage the output but I agree that in concept the
> @ProduceMime("application/json") should be enough.
>
> -Anthony
>
> On Jul 10, 2008, at 2:30 PM, Brad wrote:
>
>> Hi,
>>
>> I having a problem with content types which may be an issue with the
>> latest code off the trunk. What I'm seeing is the content-type isn't
>> being set to the desired value on the response from my service.
>>
>> The service is annotated at class level:
>>
>> @ProduceMime({"application/xml", "application/json", "text/html" })
>>
>> My custom provider is annotaded like this:
>>
>> @ProduceMime("application/json")
>>
>> When I call the service I'm setting the "Accept" header to
>> "application/json". Everything looks fine inside the service and the
>> correct provider is called. Somehow though the client gets a response
>> that has the JSON from the provider but with the content-type set to
>> "text/xml".
>>
>> I did some debugging and noticed that at JAXRSOutInterceptor line 158 :
>>
>>  message.put(Message.CONTENT_TYPE, responseType.toString());
>>
>> Which sets the content type on the message object which is good but it
>> doesn't seem to influence what is seen at the client.
>>
>> What I did notice is  inside the message object there is also a
>> Response object (in my case an instance of Catalina's ResponseFacade)
>> that appears to hold the eventual content type and this is set to
>> "text/xml" which is (I'm assuming) the default set at
>> org.apache.cxf.binding.Binding.XMLBinding line 47. From this point on
>> nothing much seems to happen to the message/response other than the
>> output stream its carrying being closed. So I guess my problem is that
>> although the content-type is being set in the Message object as a
>> value in its local map table, the value is never transfered to the
>> eventual http response object.
>>
>> When I set "Accept: text/html" I see the same problem, namely the
>> provider returns HTML but the response at the client has the header
>> "Conent-type: text/xml"
>>
>> Does it sound like I'm on the right track?
>>
>> Cheers,
>> Brad.
>
>

Reply via email to