2012-03-28 5 views
2

ich versuchen, einige Liste der documemts von einer Ressource zur Ausgabe:Rangierung Liste <T> mit Jersey und JAXB

@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(); 
} 

Die Document-Klasse ist nicht mit @XmlElement kommentierten (Ich mag nicht wirklich meine schöne Objekte mit einer solchen Low-Kommentierung Level Sachen ...), aber ich habe ein registrierter Provider für sie:

@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> { 

Wenn ich diese Ressource rufen sie einen Client mit folgenden Code:

Ich bekomme die gefürchtete Ausnahme:

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 

Ich verstehe nicht, was hier falsch ist, wie ich Code gefolgt ich an anderer Stelle gefunden, darunter in SO.

Hilfe sehr geschätzt.

+0

zu vermeiden. Könnten Sie Informationen für Klasse Document zur Verfügung stellen? Ist richtig angemerkt? –

+0

Entschuldigung. Ja, so ist es. Wir haben Dokument-Instanzen für "Zeitalter" mit Jersey marshaliert/entpackt. – insitu

+0

Oups. Der obige Kommentar war falsch, wir notieren keine Objekte, verwenden jedoch einen benutzerdefinierten Anbieter. Ich habe die Frage aktualisiert, um dies zu berücksichtigen. – insitu

Antwort

2

Vielleicht Ihre Document Klasse erfordert @XmlRootElement Annonation. Wenn Ihre Jersey-Version> = 1.2 ist, können Sie versuchen, JResposne statt Response zu verwenden. Dies ermöglicht es, die Verwendung von GenericEntity

+0

+1 Die Document-Klasse muss mit @ XmlRootElement kommentiert werden. –

+0

Danke, ich habe einen Kommentar hinzugefügt und meine Frage aktualisiert, nur für den Fall. Ich würde lieber bei reinem JAX-RS bleiben, da ich gerne die Wahl der Implementierung für so viel Zeit wie möglich treffen würde. – insitu