Configuración del archivo web.xml para filtros de JAX-RS

El archivo web.xml contiene información sobre la estructura y dependencias externas de los componentes web en el módulo, y describe la forma en que los componentes se utilizan en tiempo de ejecución. Para permitir que el contenedor web ejecute la API Java™ para aplicaciones RESTful Web Services (JAX-RS), puede configurar el archivo web.xml para definir los filtros que indican los posibles URL en los que se puede invocar el filtro.

Acerca de esta tarea

Puede modificar el archivo web.xml para que la aplicación web habilite el código de aplicación de JAX-RS. Puede especificar que se utilice un filtro JAX-RS específico de IBM® para ejecutar el código JAX-RS. El archivo web.xml proporciona información de configuración y de despliegue para los componentes web que configuran una aplicación web. Lea la información sobre la configuración del archivo web.xml para obtener una idea más clara sobre este archivo descriptor de despliegue.

Cuando se utilizan servlets, cualquier vía de acceso de servlet definida en el archivo web.xml se añade al URL base. Los filtros no añaden ninguna vía de acceso al URL base de recursos. En su lugar, las correlaciones URL de filtros indican los posibles URL en los que se puede invocar al filtro. Por ejemplo, si un recurso root tiene un valor @javax.ws.rs.Path de mirecurso, el URL final del recurso será http://<nombre_host>:<puerto_contenedor_web>/<raíz_contexto_de_aplicación_web>/mirecurso. El patrón de correlación URL para el filtro debe hacer coincidir mirecurso con el recurso root para que funcione correctamente.correctamente. Para este ejemplo, puede utilizar /* o /myresource para el patrón URL. Si hay varios recursos en la aplicación, el patrón URL para el filtro debe coincidir con todos los recursos. El patrón /* es un valor común para el filtro.

Si el URL de la solicitud entrante no coincide con ningún recurso JAX-RS de la aplicación de JAX-RS, dicha solicitud pasará al resto de la cadena de filtros. En función de la aplicación, es posible que desee utilizar el comportamiento de filtro de modo que la aplicación de JAX-RS atienda a las solicitudes o si no hay ningún recurso JAX-RS disponible, la solicitud puede continuar en un artefacto de contenedor web subyacente, como un JavaServer Pages (JSP). Si el contenedor web no tiene ningún artefacto coincidente, dicho contenedor web será responsable de la respuesta de error.

Procedimiento

  1. Abra el archivo WEB-INF/web.xml.
  2. Defina el filtro en el archivo WEB-INF/web.xml. Añada la definición de filtro siguiente en el archivo WEB-INF/web.xml. Sustituya el nombre_filtro_exclusivo por el nombre de filtro exclusivo. Sustituya también la variable nombre_clase_Java por el nombre completo del paquete y de la clase Java de la subclaseJava de la aplicación de JAX-RS.
    <filter>
             <filter-name>nombre_filtro_exclusivo</filter-name>
             <filter-class>com.ibm.websphere.jaxrs.server.IBMRestFilter</filter-class>
             <init-param>
                     <param-name>javax.ws.rs.Application</param-name>
                     <param-value>nombre_clase_Java</param-value>
             </init-param>
     </filter>
  3. (opcional) Si hay varias subclases de aplicación de JAX-RS en la misma aplicación web, debe incluir un parámetro de inicialización de filtros adicional, requestProcessorAttribute, en la definición del filtro que añada al archivo WEB-INF/web.xml. En el siguiente filtro, sustituya el nombre_filtro_exclusivo por su nombre de filtro exclusivo; sustituya la variable nombre_clase_Java por el nombre completo del paquete y de la clase Java de la subclase Java de la aplicación de JAX-RS; sustituya la variable identificador_exclusivo por un identificador exclusivo.
    <filter>
       <filter-name>nombre_filtro_exclusivo_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>nombre_clase_Java_a</param-value>
       </init-param>
       
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>identificador_exclusivo_a</param-value>
       </init-param>
    </filter>
    
    <filter>
       <filter-name>nombre_filtro_exclusivo_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>nombre_clase_Java_b</param-value>
       </init-param>
            
       <init-param>
           <param-name>requestProcessorAttribute</param-name>
           <param-value>identificador_exclusivo_b</param-value>
       </init-param>
    </filter
  4. Añada correlaciones de filtros en el archivo WEB-INF/web.xml para cada definición de filtro.

    El patrón de URL especificado en la correlación de filtro define para el contenedor los patrones de URL válidos a la hora de invocar el filtro de IBMRestFilter. Si un URL de solicitud entrante es compatible con el patrón de URL, se invocará a IBMRestFilter. Si el URL de solicitud no coincide, no se invocará al filtro. Los URL de solicitud siempre se inician en la raíz de contexto del filtro. Consulte las siguientes correlaciones del filtro de ejemplo:

    <filter-mapping>
        <filter-name>nombre_filtro</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    Por ejemplo, supongamos que dispone de estos dos recursos:
    @javax.ws.rs.Path("myresource")
    public class MyResource {
    
    }
    @javax.ws.rs.Path("myresource2")
    public class MyResource2 {
    
    }
    Puede llegar a los recursos utilizando el URL siguiente:
    http://<nombre_host>:<puerto_contenedor_web>/<raíz_contexto_de_aplicación_web>/myresource
    http://<nombre_host>:<puerto_contenedor_web>/<raíz_contexto_de_aplicación_web>/myresource2

    Si aplica la siguiente correlación de filtro:

    <filter-mapping>
            <filter-name>nombre_filtro</filter-name>
            <url-pattern>/myresource</url-pattern>
    </filter-mapping>   
    Puede utilizar recurso root MyResource visitando el URL siguiente:
    http://<nombre_host>:<puerto_contenedor_web>/<raíz_contexto_de_aplicación_web>/myresource
    Este URL invoca al filtro IBMRestFilter y el URL puede encontrar el recurso. Dado que la vía de acceso /myresource coincide con el patrón de URL en la correlación de filtro, el IBMRestFilter no se invoca y hay un recurso root que tiene un valor @Path coincidente.
    Sin embargo, supongamos que visita el siguiente URL:
    http://<nombre_host>:<puerto_contenedor_web>/<raíz_contexto_de_aplicación_web>/myresource2
    el filtro IBMRestFilter no se invoca porque el patrón de URL /myresource no coincide con /myresource2.

Resultados

Después de editar el archivo WEB-INF/web.xml para aplicar filtros, la aplicación web estará configurada para la aplicación de JAX-RS.

Ejemplo

En el ejemplo siguiente se muestra un archivo WEB-INF/web.xml que se ha configurado para aplicar filtros a una aplicación de JAX-RS. Este ejemplo define el filtro RestApplication1. Si un URL de solicitud entrante coincide con un recurso del filtro RestApplication1, la respuesta se genera a partir del filtro RestApplication1. Si el URL de solicitud entrante no coincide con ningún recurso del filtro RestApplication1 pero coincide con un recurso de OtherRestApplicationFilter, la respuesta se generará a partir del filtro OtherRestApplicationFilter. Si el URL entrante no coincide con ningún filtro, la solicitud puede atenderse desde otro artefacto de contenedor web como, por ejemplo un 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>

Qué hacer a continuación

Ensamble la aplicación web.


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_configwebxml_jrsfilters
File name: twbs_jaxrs_configwebxml_jrsfilters.html