Возврат JSON из службы RESTful с использованием CXF DOSGI - PullRequest
6 голосов
/ 12 января 2012

У меня есть простой сервис, который аннотируется аннотациями 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.

Я прочитал документацию и подумал, что, возможно, мне нужно было зарегистрировать 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 Ответ

1 голос
/ 24 августа 2012

Нет записи тела сообщения означает, что ваш провайдер json не понимает, как упорядочить ваш класс, который вы вернули в JSON.Если вы используете JSONProvider по умолчанию, то вы используете Джексона, который использует аннотации JAXB.Другими словами, возвращаемый класс должен иметь аннотацию @XmlRootElement на уровне класса.

...