Benutzerdefinierte Handler für JAX-RS-Anwendungen implementieren

Sie können Benutzerhandler entwickeln, um das Verhalten einer Handlerkette anzupassen und eindeutige Funktionen zum Handler hinzuzufügen. Wenn Sie angepasste Handler auf der Serverseite von JAX-RS-Anwendungen (Java™ API for RESTful Web Services) implementieren, können Sie die Anforderungs- und Antwortverarbeitung verbessern.

Informationen zu diesem Vorgang

Sie können serverseitige Benutzerhandler zur Anforderungshandlerkette, zur Antworthandlerkette und zur Fehlerhandlerkette hinzufügen. Wenn weitere Verarbeitungsschritte, z. B. die Protokollierung aller Clientanforderungen, erforderlich sind, ist das Hinzufügen von Benutzerhandlern eine Möglichkeit, die Protokollfunktion zu implementieren.

Im Allgemeinen empfängt ein Handler eine MessageContext-Instanz für den Zugriff auf die aktuellen Anforderungsinformationen und deren Bearbeitung. Außerdem empfängt er eine HandlerChain-Instanz für die Erweiterung der Kette. Soll die Steuerung von einem Handler an einen anderen in der Handlerkette übergeben werden, muss der Handler die Methode doChain() in der HandlerChain-Instanz aufrufen. Da ein Handler die Methode doChain() mehrmals aufrufen kann, besteht die Möglichkeit, dass Ihr Handler mehrere Male für dieselbe Anforderung aufgerufen wird. Alle Schnittstellen mit Bezug zum Handler befinden sich im Paket "org.apache.wink.server.handlers".

Handler verwenden die MessageContext-Schnittstelle, um auf die aktuellen Anforderungsinformationen zuzugreifen und sie zu bearbeiten. Mit dieser Schnittstelle können Handler den Status einer Nachricht aufrechterhalten, indem sie Attribute für den Nachrichtenkontext definieren. Sie können diese Schnittstelle auch nutzen, um Informationen an andere Handler in der Kette zu übergeben.

Die Anforderungshandlerkette muss eine Anforderung entsprechend der JAX-RS-Spezifikation verarbeiten. Dazu muss sie die Anforderung annehmen, die aufzurufende Ressourcenmethode suchen, die Anforderungsentität entserialisieren und schließlich die Ressourcenmethode aufrufen. Ein Anforderungshandler ist eine Klasse, die die Schnittstelle "org.apache.wink.server.handlers.RequestHandler" implementiert.

Die Antworthandlerkette muss das Objekt, das beim Aufrufen einer Ressourcenmethode oder einer Unterresourcenmethode gemäß JAX-RS-Spezifikation zurückgegeben wird, verarbeiten. Die Kette muss den Statuscode der Antwort bestimmen, den Medientyp der Antwort auswählen und die Antwortentität serialisieren. Ein Antworthandler ist eine Klasse, die die Schnittstelle org.apache.wink.server.handlers.ResponseHandler implementiert.

Eine Benutzerhandlerklasse muss die Schnittstelle "org.apache.wink.server.handlers.RequestHandler" oder "org.apache.wink.server.handlers.ResponseHandler" implementieren. Sie müssen eine Klasse erstellen, die die Schnittstelle "org.apache.wink.server.handlers.HandlersFactory" erweitert, damit der Anforderungs- oder Antworthandler zurückgegeben wird. Schließlich müssen Sie die Position der Eigenschaftendatei, die den Namen der Handler-Factory-Klasse enthält, als Initialisierungsparameter in der Datei "web.xml" angeben, um sicherzustellen, dass die Eigenschaftendatei vom Servlet oder Filter gelesen wird.

Vorgehensweise

  1. Erstellen Sie eine Java-Klasse, die eine Handlerschnittstelle für den Anforderungshandler implementiert. Im folgenden Beispiel wird ein Anforderungshandler erstellt. Dieser spezifische Anforderungshandler gibt den Pfad jeder Anforderung zum REST-konformen Service aus.
    package com.example;
    
    public class MyRequestHandler implements org.apache.wink.server.handlers.RequestHandler {
        public void init(java.util.Properties props) {
                      /* Diese Klasse wird mit Laufzeiteigenschaften initialisiert. */
        }
    
            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);
        }
    }

    Rufen Sie die Methode chain.doChain(context) auf, um mit der Handlerkette fortzufahren. Erweitern Sie die Schnittstelle "org.apache.wink.server.handlers.AbstractHandler", um die Handlerkette zu erweitern. In der Javadoc sind alle für den Kontext verfügbaren Methoden aufgeführt.

  2. Erstellen Sie die Handler-Factory-Implementierung. Die Handler-Factory muss einen öffentlichen Konstruktor haben, der keine Argumente übernimmt.
    public class MyHandlersFactory extends org.apache.wink.server.handlers.HandlersFactory {
            public MyHandlersFactory() {
                    /* Dieser Konstruktor muss vorhanden sein, weil er der einzige ist, der aufgerufen wurde. */
        }
    }
  3. Überschreiben Sie in der Handler-Factory-Klasse die entsprechende Methode, um die Benutzerhandler zurückzugeben und zur entsprechenden Handlerkette hinzuzufügen. In diesem Beispiel wird die Methode getRequestHandlers() außer Kraft gesetzt, weil Sie einen Anforderungshandler erstellt haben.
    package com.example;
    
    public class MyHandlersFactory extends org.apache.wink.server.handlers.HandlersFactory {
            public MyHandlersFactory() {
                    /* Dieser Konstruktor muss vorhanden sein, weil er der einzige ist, der aufgerufen wurde. */
        }
    
            public List<? extends org.apache.wink.server.handlers.RequestHandler> getRequestHandlers() {
            return Arrays.asList(com.example.MyRequestHandler);
        }
    }
  4. Erstellen Sie eine einfache Textdatei, die Eigenschaften enthält, die zur Laufzeit initialisiert werden sollen. Im folgenden Beispiel enthält die Eigenschaftendatei die folgende Anweisung zur Angabe Ihrer angepassten Handler-Factory.
    wink.handlersFactoryClass=com.example.MyHandlersFactory
  5. Fügen Sie in der Datei web.xml den Initialisierungsparameter propertiesLocation zu der Servlet- oder Filterdefinition hinzu, die die Eigenschaftendatei angibt. Wenn Sie den Ort der Eigenschaftendatei, die den Namen der Handler-Factory-Klasse enthält, als Initialisierungsparameter in der Datei "web.xml" angeben, vergewissern Sie sich, dass die Eigenschaftendatei vom JAX-RS-Servlet oder JAX-RS-Filter gelesen wird.
    <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>

Ergebnisse

Sie haben einen Benutzerhandler zur serverseitigen Handlerkette der JAX-RS-Anwendung hinzugefügt, damit diese angepassten Handler in jedem Anforderungs- oder Antwortprozess aufgerufen werden.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_handlers_customss
Dateiname:twbs_jaxrs_handlers_customss.html