Implementación de un método de recursos utilizando objetos JAXB para el contenido XML

Puede procesar XML en solicitudes y respuestas que utilicen las clases anotadas de Java Architecture for XML Binding (JAXB).

Acerca de esta tarea

Puede utilizar objetos JAXB como parámetros de entidades de solicitud y entidades de respuesta con aplicaciones Java™ API for RESTful Web Services (JAX-RS). En lugar de transformar de XML a y de tipos Java nativos de forma tediosa, puede aprovechar las ventajas de utilizar objetos JAXB. Aunque puede utilizar las interfaces javax.xml.transform.Source, java.io.InputStream o java.lang.String, o incluso una simple matriz de bytes para almacenar el XML como una solicitud o entidad de respuesta, JAXB permite realizar un enlace de datos más fácil.

El entorno de ejecución de JAX-RS tiene interfaces de proveedores estándar MessageBodyReader y MessageBodyWriter para leer y escribir objetos JAXB como entidades.

De forma predeterminada, el entorno de ejecución de JAX-RS intenta crear y utilizar una clase JAXBContext predeterminada para las clases JAXB. Sin embargo, si la clase predeterminada JAXBContext no es adecuada, a continuación, puede proporcionar una clase JAXBContext para la aplicación utilizando una interfaz de proveedor de JAX-RS ContextResolver.

Procedimiento

  1. Cree un método de recursos.

    Para que el método de recursos devuelva contenido XML, devuelva una instancia de una clase JAXB directamente o devuelva un objeto javax.ws.rs.core.Response con un objeto JAXB como entidad de respuesta.

    Supongamos que BookList es una clase JAXB, por ejemplo:
    @GET
    @Produces("application/xml", "text/xml")
    public BookList getBookList() {
        BookList list = /* get a book list */
        return list;
    }
    
    o
    
    @GET
    @Produces("application/xml", "text/xml")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).build();
    }
    En este ejemplo, application/xml y text/xml se generan a partir de los métodos de recursos.
  2. Defina el parámetro de entidad en el método de recursos utilizando una clase JAXB para procesar XML en una entidad de solicitud.
    Supongamos que Book es una clase JAXB, por ejemplo:
    @POST
    @Consumes("application/xml", "text/xml")
    @Produces("application/xml", "text/xml")
    public Book createBook(Book aBook) {
        /* store aBook into a data store */
        return aBook;
    }
    Nota: Para crear objetos JAXB como parámetros de entidades de solicitud y respuesta, debe asegurarse de que su clase jaxb sea válida para la especificación jaxb.
  3. (opcional) Si el entorno de ejecución de JAX-RS no puede crear una instancia JAXBContext adecuada, puede crear una clase que implemente la interfaz javax.ws.rs.ext.ContextResolver. Este escenario puede producirse debido a la complejidad de las clases JAXB para la aplicación. Debe añadir la anotación @Provider a la clase, por ejemplo:
    @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;
         }
     }
    Añada esta clase al conjunto de clases para que se devuelva en la subclase de su aplicación, igual que hizo con las clases de recursos.

Resultados

Ha configurado su aplicación web JAX-RS para utilizar clases JAXB para consumir y generar contenido XML.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_xmlcontent_jaxb
File name: twbs_jaxrs_xmlcontent_jaxb.html