Implementando Manipuladores de Usuário para Aplicativos JAX-RS

É possível desenvolver manipuladores de usuário para customizar o comportamento de uma cadeia de manipulador e para incluir funcionalidade exclusiva para o manipulador. Ao implementar manipuladores de usuário no lado do servidor da API Java™ para aplicativos Serviços da Web RESTful (JAX-RS), é possível aprimorar o processamento de pedido e de resposta.

Sobre Esta Tarefa

É possível incluir manipuladores de usuário customizados no lado do servidor para as cadeias de pedido, de resposta e de erros. Se um processamento adicional, como a criação de log de cada pedido do cliente, for necessário, incluir manipuladores de usuário é uma maneira de implementar a funcionalidade de criação de log.

Em geral, um manipulador recebe uma instância MessageContext para acessar e manipular as informações de pedido atuais e uma instância HandlerChain para avançar na cadeia. Para transmitir o controle de um manipulador para outro na cadeia de manipulador, o manipulador é responsável por chamar o método doChain() na instância HandlerChain. Como o manipulador pode chamar o método doChain() várias vezes, é necessário considerar a possibilidade de seu manipulador poder ser chamado mais de uma vez para o mesmo pedido. Todas as interfaces relacionadas ao manipulador residem no pacote org.wink.server.handlers.

Os manipuladores usam a interface MessageContext para acessar e manipular as informações atuais de pedido. Essa interface permite que os manipuladores mantenham o estado de uma mensagem ao configurar os atributos no contexto da mensagem. Também é possível usar essa interface para transmitir informações para outros manipuladores na cadeia.

A cadeia do manipulador de pedidos é responsável por processar um pedido de acordo com a especificação JAX-RS ao aceitar o pedido, procurar pelo método de recurso a ser chamado, desserializar a entidade de pedido e, por último, chamar o método de recurso. Um manipulador de pedido é uma classe que implementa a interface org.apache.wink.server.handlers.RequestHandler.

A cadeia de manipulador de resposta é responsável por manipular o objeto retornado a partir da chamada de um método de recurso ou de um método de sub-recurso de acordo com a especificação JAX-RS. Ele é responsável por determinar o código de status de resposta, selecionar o tipo de mídia de resposta e serializar a entidade de resposta. Um manipulador de resposta é uma classe que implementa a interface org.apache.wink.server.handlers.ResponseHandler.

Uma classe de manipulador de usuário deve implementar a interface org.apache.wink.server.handlers.RequestHandler ou org.apache.wink.server.handlers.ResponseHandler. É necessário criar uma classe que estenda a interface org.apache.wink.server.handlers.HandlersFactory para retornar o manipulador de pedido ou de resposta. Por fim, é necessário especificar o local do arquivo de propriedades, que possui o nome de classe HandlersFactory, como um parâmetro de inicialização no arquivo web.xml, para garantir que o arquivo de propriedades seja lido pelo servlet ou filtro.

Procedimento

  1. Crie uma classe Java que implemente uma interface de manipulador para o manipulador de pedido. No seguinte exemplo, um manipulador de pedido é criado. Esse manipulador de pedido específico imprime o caminho de cada pedido para o serviço RESTful.
    package com.example;
    
    public class MyRequestHandler implements org.apache.wink.server.handlers.RequestHandler {
        public void init(java.util.Properties props) {
                      /* Esta classe é inicializada com as propriedades de tempo de execução. */
        }
    
            public void handleRequest(MessageContext context, HandlersChain chain) {
            UriInfo info = context.getUriInfo();
                    System.out.println(“The path relative to the base URI is : “ + info.getPath());
            chain.doChain(context);
        }
    }

    Para continuar a cadeia de manipulador, chame o método chain.doChain(context). Use a interface org.apache.wink.server.handlers.AbstractHandler para estender a cadeia de manipulador. Consulte as informações Javadoc para todos os métodos disponíveis no contexto.

  2. Crie uma implementação de factory do manipulador. O factory do manipulador deve possuir um construtor público que não utilize nenhum argumento.
    public class MyHandlersFactory extends org.apache.wink.server.handlers.HandlersFactory {
            public MyHandlersFactory() {
                    /* This constructor must exist because it is the only one called.*/
        }
    }
  3. Na classe de factory de manipulador, substitua o método apropriado para retornar os manipuladores de usuário e para incluir os manipuladores de usuário na cadeia de manipulador apropriada. Nesse exemplo, como você criou um manipulador de pedido, o método getRequestHandlers() é substituído.
    package com.example;
    
    public class MyHandlersFactory extends org.apache.wink.server.handlers.HandlersFactory {
            public MyHandlersFactory() {
                    /* This constructor must exist because it is the only one called.*/
        }
    
            public List<? extends org.apache.wink.server.handlers.RequestHandler> getRequestHandlers() {
            return Arrays.asList(com.example.MyRequestHandler);
        }
    }
  4. Crie um arquivo de texto simples que contenha propriedades para inicializar no tempo de execução. No seguinte exemplo, o arquivo de propriedades contém a seguinte instrução para especificar o factory do manipulador customizado.
    wink.handlersFactoryClass=com.example.MyHandlersFactory
  5. No arquivo web.xml , inclua o parâmetro de inicialização propertiesLocation na definição de servlet ou de filtro que especifica o arquivo de propriedades. Ao especificar o local do arquivo de propriedades, que contém o nome da classe HandlersFactory, como um parâmetro de inicialização no arquivo web.xml, certifique-se de que o arquivo de propriedades seja lido pelo servlet ou filtro JAX-RS.
    <servlet>
        <servlet-name>RestServlet</servlet-name>
        <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.example.MyJAXRSApplicationSubclass</param-value>
        </init-param>
        <init-param>
            <param-name>propertiesLocation</param-name>
            <param-value>myproperties.properties</param-value>
        </init-param>
    </servlet>

Resultados

Você adicionou um manipulador de usuário na cadeia de manipulador no lado do servidor do seu aplicativo JAX-RS, para que esses manipuladores customizados sejam chamados em cada processo de pedido ou de resposta.


Í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_handlers_customss
Nome do arquivo: twbs_jaxrs_handlers_customss.html