使用CXF DOSGI从RESTful服务返回JSON

时间:2012-01-11 23:15:47

标签: cxf jax-rs dosgi

我有一个简单的服务,它使用JAX-RS注释进行注释,并包含@Produces("application/json")注释。我在注册服务时设置了以下属性(我使用DS,但这不重要):

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

当我运行我的应用程序时,我可以点击URL,但我的浏览器返回:

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提供程序。在May 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 个答案:

答案 0 :(得分:1)

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