2012-01-11 11 views
6

Tengo un servicio simple que está anotado con anotaciones JAX-RS e incluye la anotación @Produces("application/json"). He fijado los siguientes propiedades cuando me registro del servicio (estoy usando DS pero eso no debería importar):Devolver JSON desde un servicio RESTful usando CXF DOSGI

service.exported.interfaces -> * 
service.exported.configs -> org.apache.cxf.rs 
org.apache.cxf.rs.address -> myURI 

Cuando ejecuto mi aplicación que puede golpear la URL, pero mi navegador devuelve:

No message body writer has been found for response class MyClass. 

Mis OSGi consola muestra:

Jan 11, 2012 2:29:48 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage 
WARNING: No message body writer has been found for response class MyClass. 

leí el documentation y que tal vez tenía que registrar un proveedor de JSON. En may Activator agregué:

bundleContext.registerService(new String[] { "javax.ws.rs.ext.MessageBodyReader", 
    "javax.ws.rs.ext.MessageBodyWriter" }, 
    new org.apache.cxf.jaxrs.provider.JSONProvider(), null); 

pero esto no ha hecho ninguna diferencia.

Cómo repare el "No se ha encontrado ningún escritor de cuerpo de mensaje para la clase de respuesta MyClass". ¿mensaje de error?

Respuesta

1

Ningún escritor del cuerpo del mensaje significa que su proveedor json no entiende cómo ordenar su clase que usted volvió a JSON. Si está utilizando el proveedor JSON predeterminado, entonces está usando Jackson, que utiliza anotaciones JAXB. En otras palabras, la clase que devuelve debe tener una anotación @XmlRootElement en el nivel de clase.

+0

Vaya, el valor predeterminado es Jettison, no Jackson, pero es el mismo JAXB ... –

Cuestiones relacionadas