My mistake,

Tried again and somehow it worked where it didn't before. Not sure what I did 
wrong, sorry.

Guy

On 12-dec-2011, at 11:20, Sergey Beryozkin wrote:

Hi Guy

On 11/12/11 08:57, Guy Pardon wrote:
> Hi,
> 
> I am trying to define a custom hypermedia model (cf REST in Practice) as the 
> return type of my REST service.
> 
> With MIME type "application/json" this works, but with type 
> "application/vnd.example-com.foo+json" (which is what I want) this fails, 
> however. Calling the service URL gives:
> 
> "org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor 
> writeResponseErrorMessage
> WARNING: No message body writer has been found for response class ListResult."
> 
> My service method:
> 
>       @GET
>       @Path("list")
>       @Produces("application/vnd.example-com.foo+json")
>       public ListResult retrieveList() {
>               return new ListResult();
>       }
> 
> My configuration code looks like this:
> 
>       JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
>         JSONProvider prov = new JSONProvider();
> 
>       // setting custom mime types does not seem to work?
>         List<String>  mimeTypes = new ArrayList<String>();
>         mimeTypes.add("application/vnd.example-com.foo+json");
>         mimeTypes.add("application/json");
>         prov.setProduceMediaTypes(mimeTypes);
> 
>       // following is regular CXF config as usual
>         prov.setDropRootElement(true);
>         sf.setProvider(prov);
>         sf.setResourceClasses(ListService.class);
>         sf.setResourceProvider(ListService.class,
>             new SingletonResourceProvider(new ListService()));
>         sf.setAddress("http://localhost:9000/";);
>         sf.create();
> 
> 
> Did I miss anything? I am using CXF 2.4.1...

I've updated one of the existing tests on the trunk and it works fine for me, 
here is a trace:
----------------------------
ID: 1
Address: http://localhost:9000/the/bookstore/books/123
Http-Method: GET
Content-Type: */*
Headers: {Accept=[application/vnd.example-com.foo+json], 
accept-encoding=[gzip;q=1.0, identity; q=0.5, *;q=0], Cache-Control=[no-cache], 
connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], 
Pragma=[no-cache], User-Agent=[Java/1.6.0_26]}
--------------------------------------
12-Dec-2011 10:15:28 org.apache.cxf.interceptor.LoggingOutInterceptor
INFO: Outbound Message
---------------------------
ID: 1
Response-Code: 200
Content-Type: application/vnd.example-com.foo+json
Headers: {Date=[Mon, 12 Dec 2011 10:15:28 GMT]}
Payload: {"Book":{"id":123,"name":"CXF in Action"}}

I set produceMediaTypes on JSONProvider (from Spring),
can you confirm please
Accept: application/vnd.example-com.foo+json

is set on the wire, LoggingInInterceptor can help

Cheers, Sergey


> 
> Thanks
> Guy


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to