2012-01-11 11 views
6

Ho un servizio semplice annotato con annotazioni JAX-RS e include l'annotazione @Produces("application/json"). Ho installato le seguenti proprietà quando mi registro del servizio (sto usando DS, ma che non dovrebbe importare):Restituzione di JSON da un servizio RESTful utilizzando CXF DOSGI

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

Quando eseguo la mia domanda posso colpire l'URL, ma il browser restituisce:

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

miei OSGi console display:

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. 

ho letto il documentation e pensato che forse avevo bisogno di registrare un provider JSON. In maggio Activator ho aggiunto:

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

ma questo non ha fatto alcuna differenza.

Come correggere "Non è stato trovato alcun body writer per la classe di risposta MyClass." messaggio di errore?

risposta

1

Nessun writer del corpo del messaggio indica che il provider JSON non comprende come eseguire il marshalling della classe restituita in JSON. Se si utilizza il JSONProvider predefinito, si utilizza Jackson, che utilizza le annotazioni JAXB. In altre parole, la classe restituita dovrebbe avere un'annotazione @XmlRootElement a livello di classe.

+0

Oops, il valore predefinito è Jettison, non Jackson, ma è lo stesso JAXB ... –

Problemi correlati