2012-01-11 227 views
6

我有一个简单的服务,它使用JAX-RS注释进行注释,并包含@Produces("application/json")注释。我已经设置了以下属性,当我注册服务(我使用DS但这不应该的问题):使用CXF从RESTful服务返回JSON DOSGI

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

当我运行我的应用程序可以打的网址,但我的浏览器返回:

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

我的OSGi控制台显示:

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. 

我读了documentation,也许认为我需要注册一个JSON提供商。我可能在Activator中添加了:

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

但是这没有什么区别。

如何解决“找不到响应类MyClass的消息正文写入器”。错误信息?

回答

1

没有消息正文编写器意味着你的json提供者不知道如何编组你的类,你返回到JSON中。如果您使用默认的JSONProvider,那么您使用的是使用JAXB注释的Jackson。换句话说,你返回的类应该在类级别上有一个@XmlRootElement注解。

+0

糟糕,默认是Jettison,不是杰克逊,但它是一样的 JAXB ... – 2012-08-24 02:54:06