Ressourcenmethode mit JAXB-Objekten für XML-Inhalt implementieren

Sie können XML mit annotierten JAXB-Klassen (Java Architecture for XML Binding) in Anforderungen und Antworten verarbeiten.

Informationen zu diesem Vorgang

Sie können JAXB-Objekte als Anforderungsentitätsparameter und Antwortentitäten mit JAX-RS-Anwendungen (Java™ API for RESTful Web Services) verwenden. Anstatt XML langwierig in native Java-Typen zu konvertieren und umgekehrt, können Sie die Vorteile nutzen, die sich aus der Verwendung von JAXB-Objekten ergeben. Sie können zwar die Schnittstellen "javax.xml.transform.Source", "java.io.InputStream" oder "java.lang.String" oder sogar eine einfache Bytefeldgruppe verwenden, um den XML-Inhalt als Anforderungs- oder als Antwortentität zu speichern, JAXB ermöglicht jedoch eine einfachere Datenbindung.

Die JAX-RS-Laufzeitumgebung stellt die Standardproviderschnittstellen MessageBodyReader und MessageBodyWriter bereit, mit denen JAXB-Objekte als Entitäten gelesen und geschrieben werden können.

Standardmäßig versucht die JAX-RS-Laufzeitumgebung, eine JAXBContext-Standardklasse für JAXB-Klassen zu erstellen und zu verwenden. Wenn jedoch die JAXBContext-Klasse nicht passend ist, können Sie mit einer JAX-RS-ContextResolver-Schnittstelle eine JAXBContext-Klasse für die Anwendung bereitstellen.

Vorgehensweise

  1. Erstellen Sie eine Ressourcenmethode.

    Damit die Ressourcenmethode XML-Inhalt zurückgibt, müssen Sie die Instanz einer JAXB-Klasse direkt zurückgeben oder ein javax.ws.rs.core.Response-Objekt mit einem JAXB-Objekt als Antwortentität zurückgeben.

    Nehmen Sie an, dass "BookList" eine JAXB-Klasse ist. Beispiel:
    @GET
    @Produces("application/xml", "text/xml")
    public BookList getBookList() {
        BookList list = /* get a book list */
        return list;
    }
    
    oder
    
    @GET
    @Produces("application/xml", "text/xml")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).build();
    }
    In diesem Beispiel werden application/xml und text/xml aus denselben Ressourcenmethoden erstellt.
  2. Definieren Sie den Entitätsparameter in der Ressourcenmethode mit einer JAXB-Klasse, um XML in einer Anforderungsentität zu verarbeiten.
    Nehmen Sie an, dass "Book" eine JAXB-Klasse ist. Beispiel:
    @POST
    @Consumes("application/xml", "text/xml")
    @Produces("application/xml", "text/xml")
    public Book createBook(Book aBook) {
        /* Buch in einem Datenspeicher speichern */
        return aBook;
    }
    Anmerkung: Wenn Sie JAXB-Objekte als Anforderungsentitätsparameter und Antwortentitäten mit JAX-RS-Anwendungen verwenden möchten, müssen Sie sicherstellen, dass Ihre JAXB-Klasse für die JAXB-Spezifikation gültig ist.
  3. Optional: Wenn die JAX-RS-Laufzeitumgebung nicht in der Lage ist, eine passende JAXBContext-Instanz zu erstellen, können Sie eine Klasse erstellen, die die Schnittstelle "javax.ws.rs.ext.ContextResolver" implementiert. Das folgende Szenario kann aufgrund der Komplexität der JAXB-Klassen für die Anwendung eintreten. Sie müssen die Annotation "@Provider" zur Klasse hinzufügen. Beispiel:
    @Provider
    public class MyContextResolver implements ContextResolver<JAXBContext> {
         public JAXBContext getContext(Class<?> aType) {
             if(aType == Book.class) {
                 JAXBContext myContext = /* Diese Anweisung erstellt einen JAXB-Kontext. */ 
                 return myContext;
             }
             /* Diese Methode gibt für alle unbekannten Typen Nullwerte zurück.
                Wird ein Nullwert zurückgegeben, wird, falls vorhanden, ein von einer anderen Anwendung angegebener
                ContextResolver<JAXBContext> verwendet. */
             return null;
         }
     }
    Fügen Sie diese Klasse zu der Gruppe der Klassen hinzu, die in der Unterklasse der Anwendung zurückgegeben werden sollen, so, wie Sie mit der Ressourcenklasse verfahren sind.

Ergebnisse

Sie haben Ihre JAX-RS-Webanwendung konfiguriert, JAXB-Klassen für die Nutzung und Erstellung von XML-Inhalt zu verwenden.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_xmlcontent_jaxb
Dateiname:twbs_jaxrs_xmlcontent_jaxb.html