Implémentation d'une méthode de ressource utilisant des objets JAXB pour le contenu XML

Vous pouvez traiter le code XML dans les demandes et les réponses en utilisant des classes annotées JAXB (Java Architecture for XML Binding).

Pourquoi et quand exécuter cette tâche

Vous pouvez utiliser des objets JAXB comme paramètres d'entité de demande et d'entités de réponse avec les applications Java™ API for RESTful Web Services (JAX-RS). Au lieu de convertir, de manière fastidieuse, le code XML en types Java natifs et vice versa, vous pouvez utiliser des objets JAXB. Bien que vous puissiez utiliser l'interface javax.xml.transform.Source, java.io.InputStream ou java.lang.String ou même une matrice d'octets simple pour stocker le code XML comme entité de demande ou de réponse, JAXB facilite la liaison des données.

L'environnement d'exécution JAX-RS dispose des interfaces de fournisseurs de service standard MessageBodyReader et MessageBodyWriter pour lire et écrire des objets JAXB sous forme d'entités.

Par défaut, l'environnement d'exécution JAX-RS tente de créer et d'utiliser une classe JAXBContext par défaut pour le classes JAXB. Toutefois, si la classe JAXBContext par défaut n'est pas adaptée, vous pouvez fournir une classe JAXBContext pour l'application en utilisant une interface de fournisseur JAX-RS ContextResolver.

Procédure

  1. Créez une méthode de ressource.

    Pour que la méthode de ressource retourne le contenu XML, retournez une instance d'une classe JAXB directement ou un objet javax.ws.rs.core.Response avec un objet JAXB comme entité de réponse.

    Supposons que BookList soit une classe JAXB, par exemple :
    @GET
    @Produces("application/xml", "text/xml")
    public BookList getBookList() {
        BookList list = /* get a book list */
        return list;
    }
    
    or
    
    @GET
    @Produces("application/xml", "text/xml")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).build();
    }
    Dans cet exemple, application/xml et text/xml sont produits à partir des méthodes de ressource.
  2. Définissez le paramètre d'entité dans la méthode de ressource en utilisant une classe JAXB pour traiter XML dans une entité de demande.
    Supposons que Book soit une classe JAXB, par exemple :
    @POST
    @Consumes("application/xml", "text/xml")
    @Produces("application/xml", "text/xml")
    public Book createBook(Book aBook) {
        /* store aBook into a data store */
        return aBook;
    }
    Remarque : Pour faire d'objets JAXB des paramètres d'entité de demande et des entités de réponse, vous devez vous assurer que votre classe jaxb est valide pour la spécification jaxb.
  3. (Facultatif) Si l'environnement d'exécution JAX-RS ne peut pas créer une instance JAXBContext appropriée, vous pouvez créer une classe qui implémente l'interface javax.ws.rs.ext.ContextResolver. Ce scénario peut exister du fait de la complexité des classes JAXB de l'application. Vous devez ajouter l'annotation @Provider à la classe, par exemple :
    @Provider
    public class MyContextResolver implements ContextResolver<JAXBContext> {
         public JAXBContext getContext(Class<?> aType) {
             if(aType == Book.class) {
                 JAXBContext myContext = /* This statement creates create a JAXB Context. */ 
                 return myContext;
             }
             /* This method returns null for any types not understood.
                If null is returned, other application supplied ContextResolver<JAXBContext>
                will be used if available */
             return null;
         }
     }
    Ajoutez cette classe au groupe de classes pour retourner la sous-classe d'application, comme vous l'avez fait pour les classes de ressources.

Résultats

Vous avez configuré votre application web JAX-RS pour utiliser des classes JAXB pour consommer et produire du contenu XML.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_xmlcontent_jaxb
Nom du fichier : twbs_jaxrs_xmlcontent_jaxb.html