使用Jersey和JAXB编组列表<t> </t>

时间:2012-03-28 12:43:09

标签: java jersey

我尝试从资源中输出一些文档列表:

@GET
@Produces({MediaType.APPLICATION_XML})
public Response getDocuments(@QueryParam("provider") String provider) {
   List<Document> documents = service.getDocuments(provider);
   return Response.ok(
      new GenericEntity<List<Document>>(
        new ArrayList<Document>(documents)) {})
     .build();
}

Document类没有用@XmlElement注释(我真的不喜欢使用这样的低级东西来注释我的好对象......)但是我有一个注册的提供者:

@Service
@Provider
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.WILDCARD})
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.WILDCARD})
public class JaxRsDocumentSerializer extends 
     AbstractMessageReaderWriterProvider<Document> {

当我使用具有以下代码的客户端调用此资源时:

return getResource().path("/documents")
    .queryParam("provider", provider)
    .accept(MediaType.APPLICATION_XML).get(new GenericType<List<Document>>() {});

我得到了可怕的例外:

 javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: 
 A message body writer for Java class java.util.ArrayList, and Java type 
 java.util.List<com.polyspot.model.core.Document>, 
 and MIME media type application/xml was not found

我不明白这里出了什么问题,因为我遵循了我在别处找到的代码,包括在SO中。

非常感谢。

1 个答案:

答案 0 :(得分:2)

也许您的Document课程需要@XmlRootElement年度。

或者,如果你的泽西岛版本是&gt; = 1.2,你可以尝试使用JResposne而不是Response。这样可以避免使用GenericEntity