2012-01-11 2 views
6

У меня есть простой сервис, который аннотируется аннотациями JAX-RS и включает аннотацию @Produces("application/json"). Я создал следующие свойства, когда я зарегистрировать службу (я использую DS, но это не имеет значения):Возврат JSON из службы RESTful с использованием CXF DOSGI

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. 

Моих OS консоль отображает:

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. In 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

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

+0

Упс, по умолчанию это Jettison, а не Джексон, но это то же самое JAXB ... –