Распределительный список <T>с Джерси и JAXB - PullRequest
2 голосов
/ 28 марта 2012

Я пытаюсь вывести некоторый список документов из ресурса:

@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 Ответ

2 голосов
/ 28 марта 2012

Может быть, ваш класс Document требует аннотации @XmlRootElement.

Или, если ваша версия на Джерси> = 1.2, вы можете попробовать использовать JResposne вместо Response.Это позволяет избежать использования GenericEntity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...