2012-01-11 34 views
6

Tôi có một dịch vụ đơn giản được chú thích bằng chú thích JAX-RS và bao gồm chú thích @Produces("application/json"). Tôi đã thiết lập các thuộc tính sau khi tôi đăng ký dịch vụ (Tôi đang sử dụng DS nhưng đó không phải vấn đề):Trả lại JSON từ một dịch vụ RESTful bằng CXF DOSGI

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

Khi tôi chạy ứng dụng của tôi, tôi có thể đánh địa chỉ URL, nhưng trình duyệt của tôi trả về:

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

OSGi My console hiển thị:

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. 

tôi đọc documentation và nghĩ có lẽ tôi cần phải đăng ký một nhà cung cấp JSON. Trong may Activator tôi đã thêm:

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

nhưng điều này không có bất kỳ sự khác biệt nào.

Làm cách nào để khắc phục "Không tìm thấy trình soạn thảo nội dung thư nào cho lớp phản hồi MyClass". thông báo lỗi?

Trả lời

1

Không có người viết thư nào có nghĩa là nhà cung cấp dịch vụ json của bạn không hiểu cách sắp xếp lớp của bạn mà bạn đã trả về JSON. Nếu bạn đang sử dụng JSONProvider mặc định, thì bạn đang sử dụng Jackson, sử dụng chú thích JAXB. Nói cách khác, lớp bạn trả về phải có chú thích @XmlRootElement ở cấp lớp.

+0

Rất tiếc, mặc định là Jettison, không phải Jackson, nhưng cũng giống như JAXB ... –

Các vấn đề liên quan