JAX-WS-Web-Service-Anwendung erstellen, die Web Services Addressing verwendet

Web Services Addressing (WS-Addressing) unterstützt die Interoperabilität zwischen Web-Services, indem es eine Standardmethode für die Adressierung von Web-Services definiert und in Nachrichten Adressierungsinformationen bereitstellt. Diese Task beschreibt die Schritte, die ausgeführt werden müssen, um einen Web-Service zu erstellen, auf den über eine WS-Addressing-Endpunktreferenz zugegriffen wird. Die Task beschreibt außerdem die zusätzlichen Schritte, die ausgeführt werden müssen, um statusabhängige Ressourcen in einem Web-Service zu verwenden.

Vorbereitende Schritte

Die in dieser Task beschriebenen Schritte gelten für Server und Clients, die in WebSphere Application Server ausgeführt werden.

Informationen zu diesem Vorgang

Führen Sie diese Task aus, wenn Sie einen JAX-WS-Web-Service erstellen, der die Spezifikation "WS-Addressing" verwendet. In dieser Task werden die WS-Addressing-Anwendungsprogrammierschnittstellen (API, Application Programming Interface) von JAX-WS verwendet, um die erforderliche Endpunktreferenz zu erstellen. Alternativ dazu können Sie Endpunktreferenzen mit der IBM proprietären WS-Addressing-API erstellen und sie in API-Objekte von JAX-WS konvertieren, damit sie auch in der restlichen Anwendung verwendet werden können.

Vorgehensweise

  1. Stellen Sie eine Web-Service-Schnittstelle bereit, die eine Endpunktreferenz an den Zielservice zurückgibt.

    Die Schnittstelle muss eine Endpunktreferenz zurückgeben. Hierfür kann sie eine Factory-Operation oder einen separaten Factoryservice verwenden. Der Zielservice kann einer Ressourceninstanz vorangestellt sein, z. B. ein elektronischer Warenkorb.

  2. Implementieren Sie den Web-Service, den Sie im vorherigen Schritt erstellt haben. Führen Sie für den WS-Addressing-Teil der Implementierung die folgenden Schritte aus:
    1. Optional: Schließen Sie Annotationen ein, um das WS-Addressing-Verhalten zu spezifizieren. Weitere Einzelheiten finden Sie im Artikel WS-Addressing-Annotationen.
    2. Optional: Wenn Ihre Schnittstelle einen Web-Service umfasst, der einer Ressourceninstanz vorangestellt ist, erstellen oder ermitteln Sie die Ressourceninstanz.
    3. Optional: Wenn Sie eine Ressourceninstanz verwenden, rufen Sie die Kennung der Ressource ab. Die Ressourcen-ID ist anwendungsabhängig und kann während der Erstellung der Ressourceninstanz generiert werden.
      Achtung: Fügen Sie keine sensiblen Informationen in die Ressourcen-ID ein, da die ID in der SOAP-Nachricht weitergegeben wird.
    4. Erstellen Sie eine Endpunktreferenz, die auf den Web-Service verweist. Folgen Sie dazu den Anweisungen im Artikel Endpunktreferenzen über die WS-Adressing-API von JAX-WS erstellen. Wenn Sie eine Ressourceninstanz verwenden, übergeben Sie die Ressourcenkennung als Parameter.
    5. Geben Sie die Endpunktreferenz zurück.
  3. Wenn Ihr Web-Service Ressourceninstanzen verwendet, erweitern Sie die Implementierung so, dass eingehende Nachrichten den entsprechenden Ressourceninstanzen zugeordnet werden. Da Sie die Ressourcen-ID der zuvor erstellten Endpunktreferenz zugeordnet haben, enthalten alle eingehenden Nachrichten für diese Endpunktreferenz die Informationen zur Ressourcen-ID als Referenzparameter im SOAP-Header der Nachricht. Da die Ressourcen-ID im SOAP-Header übergeben wird, müssen Sie sie nicht in der Web-Service-Schnittstelle offen legen. Wenn WebSphere Application Server die Nachricht empfängt, werden diese Informationen in den Nachrichtenkontext des Threads kopiert. Erweitern Sie die Implementierung, um die folgenden Aktionen auszuführen:
    1. Rufen Sie die Kennung der Ressourceninstanz aus dem Nachrichtenkontext ab.
      • Wenn Sie den WS-Addressing-Namespace der Spezifikation vom August 2005 verwenden, verwenden Sie die Eigenschaft REFERENCE_PARAMETERS der Klasse "MessageContext".
      • Wenn Sie den WS-Addressing-Namespace der Spezifikation vom August 2004 verwenden, müssen Sie die IBM WS-Addressing-API verwenden, insbesondere die Methode "EndpointReferenceManager.getReferenceParameterFrom MessageContext(QName resource_id)".
      Verwenden Sie die folgende Methode für den WS-Addressing-Namespace der Spezifikation vom August 2005:
      ...
      List resourceIDList = (List)getContext().getMessageContext().get(MessageContext.REFERENCE_PARAMETERS);
      ...
      Verwenden Sie die folgende Methode für den WS-Addressing-Namespace der Spezifikation vom August 2004:
      ...
      
      String resource_identifier = 
              EndpointReferenceManager.getReferenceParameterFromMessageContext(PRINTER_ID_PARAM_QNAME);...
    2. Leiten Sie die Nachricht an die entsprechende Ressourceninstanz weiter.
  4. Optional: Konfigurieren Sie einen Proxy-Client für die Kommunikation mit dem Service.
    1. Verwenden Sie das Tool "wsimport" oder "xjc", um die für den Client erforderlichen Artefakte zu erstellen.
      Anmerkung: Wenn Sie die WS-Addressing-Spezifikation vom August 2004 verwenden möchten, geben Sie die bereitgestellte Bindungsdatei "Stammverzeichnis_des_Anwendungsservers/util/SubmissionEndpointReference.xjb" mit dem Parameter "-b" des Tools an. Dieser Parameter weist das Tool an, Endpunktreferenzobjekte über die Klasse "SubmissionEndpointReference" zu generieren, die zur IBM Implementierung der Standard-APIs von JAX-WS gehört. Wenn Sie diese Bindungsdatei nicht angeben, funktionieren die generierten Endpunktreferenzobjekte nicht mit der Standard-API von JAX-WS.
    2. Erstellen Sie im Clientcode eine Instanz der Serviceklasse.
    3. Rufen Sie ein Proxy-Objekt von der Serviceklasse ab. Proxy-Objekte können auf verschiedene Arten über die Anwendungsprogrammierschnittstelle von JAX-WS abgerufen werden. Es gibt beispielsweise mehrere getPort-Methoden in der Klasse "Service" und eine in der Klasse "EndpointReference". Weitere Informationen finden Sie in der API-Dokumentation.
    4. Optional: Verwenden Sie das Feature "Addressing" oder "SubmissionAddressing", um die WS-Addressing-Unterstützung zu aktivieren. Erstellen Sie beispielsweise einen Proxy über eine Methode "getPort", die Web-Service-Features als Parameter akzeptiert. Wenn Sie möchten, können Sie die WS-Addressing-Unterstützung auch mit einer anderen Methode, z. B. mit Richtliniensätzen, aktivieren. Weitere Informationen finden Sie im Artikel WS-Addressing-Unterstützung für JAX-WS-Anwendungen aktivieren.
    5. Verwenden Sie das Proxy-Objekt, um die Servicemethode aufzurufen, die die Endpunktreferenz zurückgibt.

    Der folgende Beispielcode zeigt einen Client, der einen Web-Service aufruft, um zwei Zahlen zu addieren. Der Web-Service setzt ein Ticket (die Ressourcenkennung) an den Client ab und fordert den Client auf, dieses Ticket beim Aufrufen des Web-Service zu verwenden.

    Der Client erstellt zwei Proxys. Der erste Proxy ruft das Ticket als Endpunktreferenz vom Service ab. Der zweite Proxy verwendet die Klasse "AddressingFeature", um WS-Addressing für die Spezifikation vom August 2005 zu aktivieren, und ruft den Service auf, um die beiden Zahlen zu addieren.
    ...
    CalculatorService service = new CalculatorService();
    // Ersten Proxy erstellen
    Calculator port1 = service.getCalculatorServicePort();
    // Ticket als Endpunktreferenz vom Service abrufen
    W3CEndpointReference epr = port1.getTicket();
    
    // Zweiten Proxy über ein Adressierungfeature erstellen, das WS-Addressing aktiviert
    Calculator port2 = epr.getPort(Calculator.class, new AddressingFeature());
    // Service zum Addieren der Zahlen aufrufen
    int answer = port2.add(value0, value1);
    System.out.println("The answer is: " + answer);
    ...
    Anmerkung: Wenn die Metadaten der Endpunktreferenz mit den Informationen in Konflikt steht, die der abgehenden Nachricht bereit zugeordnet sind (z. B., wenn das Proxy-Objekt eine andere Schnittstelle darstellen soll), wird eine Ausnahme des Typs "javax.xml.ws.WebServiceException" ausgelöst, wenn versucht wird, den Endpunkt aufzurufen.
    Wen Sie Eigenschaften für die Nachrichtenadressierung definieren möchten, z. B. einen Endpunkt für Antworten, müssen Sie die IBM proprietäre Systemprogrammierschnittstelle (SPI, System Programming Interface) und die Klasse "BindingProvider" verwenden, wie im Artikel Eigenschaften für die Nachrichtenadressierung mit den IBM proprietären Web-Services-Addressing-SPIs angeben und abrufen beschrieben ist.
  5. Optional: Konfigurieren Sie einen Dispatch-Client für die Kommunikation mit dem Service. Sie können einen Client auf verschiedene Arten konfigurieren. In den folgenden Schritten ist eine davon beschrieben:
    1. Erstellen Sie eine Instanz des Service.
    2. Fügen Sie dem Serviceobjekt einen Port hinzu.
    3. Erstellen Sie eine Instanz der Klasse "Dispatch", und übergeben Sie die Endpunktreferenz.
    4. Erstellen Sie ein Dispatch-Objekt. Verwenden Sie die Methode "Service.createDispatch" mit den folgenden Parametern:
      • Die vom Service zurückgegebene Endpunktreferenz, die die Ressource darstellt, an die Nachrichten weitergeleitet werden.
      • Ein Bereich von Web-Service-Features. Schließen Sie ein oder mehrere WS-Addressing-Features ein, um WS-Addressing zu aktivieren. Weitere Einzelheiten finden Sie im Artikel WS-Addressing-Unterstützung für JAX-WS-Anwendungen aktivieren.
      Es gibt mehrere Varianten der Methode "Service.createDispatch2. Weitere Einzelheiten finden Sie in der API-Dokumentation.
    5. Erstellen Sie die Clientanforderungsnachricht.
    6. Rufen Sie den Serviceendpunkt mit dem Dispatch-Client auf.
    Der folgende Code zeigt ein Beispielfragment eines Dispatch-Clients, der die WS-Addressing-Spezifikation vom August 2004 aktiviert.
    ...
    CalculatorService service = new CalculatorService();
    Dispatch(<SOAPMessage> dispatch = service.createDispatch( 
        endpointReference,
        SOAPMessage.class,  
        Service.Mode.MESSAGE,  
        new SubmissionAddressingFeature(true));
    ...

Ergebnisse

Der Web-Service und der Client sind jetzt so konfiguriert, dass sie Endpunktreferenzen über die WS-Addressing-Unterstützung verwenden. Ein ausführliches Beispiel mit Code finden Sie im Artikel Beispiel: Einen Web-Service erstellen, der die API "JAX-WS Web Services Addressing" verwendet, um auf eine generische Web-Service-Ressourceninstanz zuzugreifen.

Nächste Schritte

  • Informationen zur Sicherheit mit WS-Addressing finden Sie im Artikel Sicherheit in Web Services Addressing.
  • Implementieren Sie die Anwendung. Wenn Sie WS-Addressing-Annotationen oder -Features im Code verwendet haben, müssen Sie zum Aktivieren der WS-Addressing-Unterstützung keine weiteren Schritte ausführen. Weitere Informationen und weitere Szenarien, die die Ausführung weiterer Schritte erfordern, z. B. die Aktivierung der WS-Addressing-Unterstützung über Richtliniensätze, finden Sie im Artikel WS-Addressing-Unterstützung für JAX-WS-Anwendungen aktivieren.

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_wsa_rap_jaxws
Dateiname:twbs_wsa_rap_jaxws.html