Implementación de manejadores de usuario para aplicaciones de JAX-RS

Puede desarrollar manejadores de usuario para personalizar el comportamiento de una cadena de manejadores y para añadir la funcionalidad exclusiva para el manejador. Si implementa los manejadores de usuario en la parte del servidor de una aplicación Java™ API for RESTful Web Services (JAX-RS), puede mejorar el proceso de solicitudes y respuestas.

Acerca de esta tarea

En la solicitud, la respuesta y en las cadenas de manejadores de errores, puede añadir manejadores de usuario personalizados en la parte del servidor. Si es necesario un proceso adicional como, por ejemplo, registrar cada solicitud de cliente; entonces, añadir manejadores de usuario será una forma de implementar la funcionalidad de registro.

En general, un manejador recibe una instancia de MessageContext para acceder y manipular la información de la solicitud actual y una instancia HandlerChain para avanzar en la cadena. Para pasar el control de un manejador a otro en la cadena de manejadores, es responsabilidad del manejador invocar el método doChain() en la instancia de HandlerChain. Dado que un manejador puede invocar al método doChain() varias veces, debe considerar la posibilidad de que el manejador se pueda invocar más de una vez para la misma solicitud. Todas las interfaces relacionadas residen en el paquete org.apache.wink.server.handlers.

Los manejadores utilizan la interfaz de MessageContext para acceder y manipular la información de solicitud actual. Esta interfaz permite los manejadores mantener el estado de un mensaje estableciendo atributos en el contexto del mensaje. También puede utilizar esta interfaz para pasar información a otros manejadores de la cadena.

La cadena del manejador de solicitudes es responsable de procesar una solicitud de acuerdo con la la especificación de JAX-RS de aceptar la solicitud, buscar métodos de recursos para invocarlos, deserializar la entidad de solicitudes y, finalmente, invocar el método de recursos. Un manejador de solicitudes es una clase que implementa la interfaz org.apache.wink.server.handlers.RequestHandler.

La cadena del manejador de respuestas es responsable de manejar el objeto devuelto de la invocación de un método de recurso o de un método de subrecurso de acuerdo con la especificación de JAX-RS. Es responsable de determinar el código de estado de la respuesta, de seleccionar el tipo de medio de la respuesta y de serializar la entidad de la respuesta. Un manejador de respuestas es una clase que implementa la interfaz org.apache.wink.server.handlers.ResponseHandler.

Una clase de manejador de usuarios debe implementar la interfaz org.apache.wink.server.handlers.RequestHandler u org.apache.wink.server.handlers.ResponseHandler. Debe crear una clase que amplíe la interfaz org.apache.wink.server.handlers.HandlersFactory para devolverla al manejador de solicitudes o respuestas. Finalmente, debe especificar la ubicación del archivo de propiedades, que tiene el nombre de clase HandlersFactory, como un parámetro de inicialización en el archivo web.xml con el fin de asegurarse de que el servlet o filtro leerá el archivo de propiedades.

Procedimiento

  1. Cree una clase Java que implemente una interfaz de manejador para el manejador de solicitudes. En el ejemplo siguiente, se creará un manejador de solicitudes. Este manejador de solicitudes específico imprime la vía de acceso de cada solicitud para el servicio RESTful.
    package com.example;
    
    public class MyRequestHandler implements org.apache.wink.server.handlers.RequestHandler {
        public void init(java.util.Properties props) {
                      /* This class is initialized with runtime properties. */
        }
    
            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 la cadena del manejador, invoque al método chain.doChain(context). Utilice la interfaz org.apache.wink.server.handlers.AbstractHandler para ampliar la cadena del manejador. Consulte la información de Javadoc para todos los métodos disponibles en el contexto.

  2. Cree la implementación del tejido del manejador. El tejido del manejador debe tener un constructor público sin argumentos.
    public class MyHandlersFactory extends org.apache.wink.server.handlers.HandlersFactory {
        public MyHandlersFactory() {
                    /* This constructor must exist because it is the only one called.*/
        }
    }
  3. En la clase del tejido del manejador, altere temporalmente el método adecuado para devolver manejadores de usuarios y para agregar manejadores de usuarios en la cadena del manejador oportuno. En este ejemplo, dado que ha creado un manejador de solicitudes, se modificará temporalmente el método getRequestHandlers().
    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. Cree un archivo de texto simple que contenga propiedades para inicializarlas en el tiempo de ejecución. En el ejemplo siguiente, el archivo de propiedades contiene la sentencia siguiente para especificar el tejido de su manejador personalizado.
    wink.handlersFactoryClass=com.example.MyHandlersFactory
  5. En el archivo web.xml, añada el parámetro de inicialización propertiesLocation en el servlet o en la definición del filtro que especifica el archivo de propiedades. Especificando la ubicación del archivo de propiedades, que contiene el nombre de clase HandlersFactory, como parámetro de inicialización en el archivo web.xml, se asegura de que el servlet o filtro de JAX-RS leerá el archivo de propiedades.
    <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

Se ha añadido un manejador de usuario en la cadena de manejadores en la parte del servidor de su aplicación de JAX-RS de modo que estos manejadores personalizados se invocan en cada proceso de solicitud o respuesta.


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_handlers_customss
File name: twbs_jaxrs_handlers_customss.html