Configurando o Arquivo web.xml para Filtros JAX-RS

O arquivo web.xml contém informações sobre a estrutura e dependências externas de componentes da Web no módulo e descreve como os componentes são usados no tempo de execução. Para ativar o contêiner da Web para executar aplicativos Java™ API for RESTful Web Services (JAX-RS), é possível configurar o arquivo web.xml para definir filtros que indicam as possíveis URLs nas quais o filtro pode ser chamado.

Sobre Esta Tarefa

É possível configurar o arquivo web.xml para o seu aplicativo da Web para ativar o código do aplicativo JAX-RS. É possível especificar um filtro JAX-RS específico da IBM® para usar para executar o seu código JAX-RS. O arquivo web.xml fornece informações de configuração e implementação para os componentes da Web que compõem um aplicativo da Web. Consulte a configuração do arquivo web.xml para o JAX-RS para saber mais sobre esse arquivo descritor de implementação.

Ao usar os servlets, qualquer caminho de servlet definido no arquivo web.xml é anexado à URL de base. Os filtros não anexam um caminho na URL de base de recurso. Em vez disso, os mapeamentos de URL de filtro indicam as URLs possíveis nas quais o filtro pode ser chamado. Por exemplo, se um recurso raiz possuir um valor @javax.ws.rs.Path de myresource, a URL final do recurso será http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource. O padrão de mapeamento de URL para o filtro deve corresponder myresource para o recurso raiz a ser atendido corretamente. Para esse exemplo, é possível usar /* ou /myresource para o padrão de URL. Quando houver vários recursos no aplicativo, o padrão de URL para o filtro deverá corresponder a todos os recursos. O padrão /* é um valor comum para o filtro.

Se uma URL de pedido recebido não corresponder a nenhum recurso JAX-RS no aplicativo JAX-RS, o pedido será transmitido para o restante da cadeia de filtros. Dependendo do aplicativo, você pode desejar usar o comportamento do filtro para que os pedidos sejam atendidos pelo aplicativo JAX-RS, ou se não houver nenhum recurso JAX-RS disponível, o pedido pode prosseguir para um artefato de contêiner da Web subjacente, como um JavaServer Pages (JSP). Se o contêiner da Web não tiver nenhum artefato correspondente, então o contêiner da Web será responsável pela resposta de erro.

Procedimento

  1. Abra o arquivo WEB-INF/web.xml.
  2. Defina o filtro no arquivo WEB-INF/web.xml. Inclua a seguinte definição de filtro no arquivo WEB-INF/web.xml. Substitua unique_filter_name pelo nome de filtro exclusivo. Substitua também a variável Java_class_name pelo pacote e nome de classe Java completo da subclasse Java do aplicativo JAX-RS.
    <filter>
             <filter-name>unique_filter_name</filter-name>
             <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
             <init-param>
                     <param-name>javax.ws.rs.Application</param-name>
                     <param-value>Java_class_name</param-value>
             </init-param>
     </filter>
  3. (opcional) Se houver diversas subclasses do aplicativo JAX-RS necessárias no mesmo aplicativo da Web, você deve incluir um parâmetro de inicialização de filtro adicional, requestProcessorAttribute, na definição de filter que você incluir no arquivo WEB-INF/web.xml. No seguinte filtro, substitua unique_filter_name pelo nome de filtro exclusivo, substitua a variável Java_class_name pelo pacote e nome de classe Java completo da subclasse Java do aplicativo JAX-RS e substitua a variável unique_identifier pelo identificador exclusivo.
    <filter>
       <filter-name>unique_filter_name_a</filter-name>
       <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
       <init-param>
           <param-name>javax.ws.rs.Application</param-name>
           <param-value>Java_class_name_a</param-value>
       </init-param>
       
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>unique_identifier_a</param-value>
       </init-param>
    </filter>
    
    <filter>
       <filter-name>unique_filter_name_b</filter-name>
       <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
       <init-param>
           <param-name>javax.ws.rs.Application</param-name>
           <param-value>Java_class_name_b</param-value>
       </init-param>
            
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>unique_identifier_b</param-value>
       </init-param>
    </filter
  4. Inclua mapeamentos de filtro no arquivo WEB-INF/web.xml para cada definição de filtro.

    O padrão de URL especificado no mapeamento de filtro é definido para o contêiner dos padrões de URL válidos para chamar o filtro IBMRestFilter. Se uma URL de pedido recebido for compatível com o padrão de URL, IBMRestFilter será chamado. Se a URL de pedido não corresponder, o filtro não será chamado. As URLs de pedido sempre iniciam na raiz de contexto para o filtro. Consulte o seguinte exemplo de mapeamentos de filtro:

    <filter-mapping>
        <filter-name>filter_name</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    Por exemplo, suponha que você possua os seguintes dois recursos:
    @javax.ws.rs.Path("myresource")
    public class MyResource {
    
    }
    @javax.ws.rs.Path("myresource2")
    public class MyResource2 {
    
    }
    É possível alcançar os recursos usando a seguinte URL:
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2

    Se você aplicar o seguinte mapeamento de filtro:

    <filter-mapping>
            <filter-name>filter_name</filter-name>
            <url-pattern>/myresource</url-pattern>
    </filter-mapping>   
    é possível usar o recurso raiz MyResource acessando a seguinte URL:
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource
    Essa URL chama o filtro IBMRestFilter e a URL pode localizar o recurso. Como o caminho /myresource corresponde ao padrão de URL no mapeamento de filtro, IBMRestFilter é chamado e há um recurso raiz que possui um valor @Path correspondente.
    Entretanto, suponha que você visite a seguinte URL:
    http://<your_hostname>:<your Web_container_port>/<context_root_of_Web_application>/myresource2
    o filtro IBMRestFilter não é chamado porque o padrão de URL /myresource não corresponde a /myresource2.

Resultados

Após editar o arquivo WEB-INF/web.xml para aplicar filtros, o aplicativo da Web é configurado para o aplicativo JAX-RS.

Exemplo

O seguinte exemplo mostra um arquivo WEB-INF/web.xml que é configurado para aplicar filtros em um aplicativo JAX-RS. Esse exemplo define o filtro RestApplication1. Se uma URL de pedido recebido corresponder a um recurso no filtro RestApplication1, a resposta será gerada a partir do filtro RestApplication1. Se a URL de pedido recebido não corresponder a um recurso no filtro RestApplication1, mas corresponder a um recurso em OtherRestApplicationFilter, a resposta será gerada a partir do filtro OtherRestApplicationFilter. Se a URL recebida não corresponder ao filtro, então o pedido pode ser atendido de outro artefato do contêiner da Web, como um JSP.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" 
xmlns=http://java.sun.com/xml/ns/j2ee 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

     <filter>
        <filter-name>RestApplication1</filter-name>
        <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.ibm.rest.sample.app1.MyApplication</param-value>
        </init-param>
        <init-param>
            <param-name>requestProcessorAttribute</param-name>
            <param-value>restApplication1ProcessorID</param-value>
        </init-param>
    </filter>
     <filter>
        <filter-name>OtherRestApplicationServlet</filter-name>
        <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.ibm.rest.other.sample.OtherApplication</param-value>
        </init-param>
        <init-param>
            <param-name>requestProcessorAttribute</param-name>
            <param-value>otherRestApplicationID </param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>RestApplication1</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>OtherRestApplicationServlet</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

O que Fazer Depois

Monte o aplicativo da Web.


Í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_configwebxml_jrsfilters
Nome do arquivo: twbs_jaxrs_configwebxml_jrsfilters.html