Implementando um Método de Recurso Usando Objetos JAXB para Conteúdo XML

É possível processar XML em pedidos e repostas usando as classes anotadas Java Architecture for XML Binding (JAXB).

Sobre Esta Tarefa

É possível usar os objetos JAXB como parâmetros de entidade de pedido e entidades de resposta com os aplicativos Java™ API for RESTful Web Services (JAX-RS). Em vez de transformar o XML para e a partir de tipos Java nativos de maneira tediosa, é possível usufruir das vantagens do uso de objetos JAXB. Apesar de ser possível usar as interfaces javax.xml.transform.Source, java.io.InputStream, ou java.lang.String, ou mesmo uma matriz de bytes simples para armazenar o XML como uma entidade de solicitação ou resposta, a JAXB possibilita facilitar a ligação de dados

O ambiente de tempo de execução JAX-RS possui interfaces de provedor MessageBodyReader e MessageBodyWriter padrão para ler e gravar objetos JAXB como entidades.

Por padrão, o ambiente de tempo de execução JAX-RS tenta criar e usar uma classe JAXBContext padrão para classes JAXB. Entretanto, se a classe JAXBContext padrão não for adequada, é possível fornecer uma classe JAXBContext para o aplicativo usando a interface do provedor JAX-RS ContextResolver.

Procedimento

  1. Crie o método de recurso.

    Para que o método de recurso retorne o conteúdo XML, retorne uma instância de uma classe JAXB diretamente ou retorne um objeto javax.ws.rs.core.Response com um objeto JAXB como a entidade de resposta.

    Suponha que BookList seja uma classe JAXB, por exemplo:
    @GET
    @Produces("application/xml", "text/xml")
    public BookList getBookList() {
        BookList list = /* obter uma lista de livros */
        return list;
    }
    
    ou em
    
    @GET
    @Produces("application/xml", "text/xml")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).build();
    }
    Nesse exemplo, application/xml e text/xml são produzidos a partir dos métodos de recurso.
  2. Defina o parâmetro de entidade no método de recurso usando uma classe JAXB para processar XML em uma entidade de pedido.
    Suponha que Book seja uma classe JAXB, por exemplo:
    @POST
    @Consumes("application/xml", "text/xml")
    @Produces("application/xml", "text/xml")
    public Book createBook(Book aBook) {
        /* loja aBook em um armazenamento de dados */
        return aBook;
    }
    Nota: Para tornar os objetos JAXB como parâmetros de entidade de solicitação e entidades de resposta, deve-se assegurar que a classe jaxb é válida para a especificação jaxb.
  3. (opcional) Se o ambiente de tempo de execução JAX-RS não puder criar uma instância JAXBContext apropriada, poderá criar uma classe que implementa a interface javax.ws.rs.ext.ContextResolver. Este cenário pode ocorrer devido às complexidades das classes JAXB para o aplicativo. Deve-se incluir a anotação @Provider na classe, por exemplo:
    @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;
         }
     }
    Inclua essa classe no conjunto de classes para retornar subclasses no seu aplicativo, tal como é feito nas classes de recursos.

Resultados

Você configurou o seu aplicativo da Web JAX-RS para usar classes JAXB para consumir e produzir conteúdo XML.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_xmlcontent_jaxb
Nome do arquivo: twbs_jaxrs_xmlcontent_jaxb.html