Implizite SOAP-Header mit JAX-RPC senden

Sie können einem vorhandenen JAX-RPC-Web-Service-Client (Java™ API for XML-based RPC) ermöglichen, Werte in impliziten SOAP-Headern zu senden. Wenn Sie Ihren Clientcode ändern, um implizite SOAP-Header zu senden, können Sie in abgehenden Web-Service-Anforderungen bestimmte Informationen senden.

Vorbereitende Schritte

Für die Ausführung dieser Task benötigen Sie einen Web-Service-Client, dem Sie das Senden impliziter SOAP-Header ermöglichen können.
Ein impliziter SOAP-Header ist ein SOAP-Header, auf den eine der folgenden Beschreibungen passt:
  • Ein Nachrichtenabschnitt, der in der Bindung in der WSDL-Datei als SOAP-Header deklariert ist, dessen Nachrichtendefinition aber nicht von einem Element "portType" in einer WSDL-Datei referenziert wird.
  • Ein Element, das nicht in der WSDL-Datei enthalten ist.

Handler- und Serviceendpunkte können implizite oder explizite SOAP-Header mit dem SAAJ-Datenmodell (SOAP with Attachments API for Java) bearbeiten.

Geschützte SOAP-Header können nicht bearbeitet werden. Ein SOAP-Header der von seiner Eignerkomponente, z. B. Web Services Security, als geschützt deklariert ist, steht Clientanwendungen nicht zur Verfügung. Es tritt eine Ausnahme ein, wenn Sie versuchen, geschützte SOAP-Header zu bearbeiten.

Informationen zu diesem Vorgang

Die Clientanwendung setzt Eigenschaften im Stub- oder Call-Objekt, um implizite SOAP-Header zu senden und zu empfangen.

Vorgehensweise

  1. Erstellen Sie ein Objekt "java.util.HashMap".
  2. Fügen Sie den HashMap-Objekt für jeden impliziten SOAP-Header, den der Client senden möchte, einen Eintrag hinzu. Der HashMap-Eintragsschlüssel ist der QName (qualifizierte Name) des SOAP-Headers. Der HashMap-Eintragswert ist ein SAAJ-Objekt "SOAPElement" oder eine Zeichenfolge, die den XML-Text des gesamten SOAP-Headerelements enthält.
  3. Legen Sie das HashMap-Objekt als Eigenschaft im Stub- oder Call-Objekt fest. Der Eigenschaftsname ist "com.ibm.websphere.webservices.Constants.REQUEST_SOAP_HEADERS". Der Eigenschaftswert ist "HashMap".
  4. Setzen Sie die fernen Methodenaufrufe mit dem Stub- oder Call-Objekt ab. Die Header im HashMap-Objekt werden in der abgehenden Nachricht gesendet.
    Es kann ein Fehler vom Typ JAXRPCException eintreten, wenn eine der folgenden Aussagen zutrifft:
    • Das HashMap-Objekt enthält einen Schlüssel, der kein QName-Objekt ist, oder das HashMap-Objekt enthält einen Wert, der keine Zeichenfolge bzw. kein SOAPElement-Objekt ist.
    • Das HashMap-Objekt enthält einen Schlüssel, der einen SOAP-Header darstellt, der von der Eignerkomponente als geschützt deklariert wurde.

Ergebnisse

Sie haben einen JAX-RPC-Web-Service-Client, der für das Senden impliziter SOAP-Header konfiguriert ist.

Beispiel

Das folgende Programmierbeispiel veranschaulicht, wie im Rahmen einer Web-Service-Anforderung und -Antwort zwei Anforderungs-SOAP-Header gesendet und ein Antwort-SOAP-Header empfangen werden können:

1 // Hashmaps für Anforderungen und Antworten erstellen.
2 HashMap requestHeaders=new HashMap();
3 HashMap responseHeaders=new HashMap();
4
5 //Add "AtmUuid1" and "AtmUuid2" to the request hashmap.
6 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid1"),
7   "<AtmUuid1 xmlns=\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
8 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid2"),
9  ((IBMSOAPFactory)SOAPFactory.newInstance()).createElementFromXMLString(
10   "x:AtmUuid2 xmlns:x=\"com.rotbank.security\"><x:uuid>ROTB-0A01254385FCA09
     </x:uuid><x:AtmUuid2>"));
11
12 //Add "ServerUuid" to the response hashmap.
13 //If "responseHeaders" is empty, all the SOAP headers are
14 //extracted from the response message.
15 responseHeaders.put(new QName("com.rotbank.security","ServerUuid"), null);
16
17 //Set the properties on the Stub object.
18 stub.setProperty(Constants.REQUEST_SOAP_HEADERS.requestHeaders);
19 stub.setProperty(Constants.RESPONSE_SOAP_HEADERS.responseHeaders);
20
21 //Call the operationon the Stub.
22 stub.foo(parm2, parm2);
23
24 //Retrieve "ServerUuid" from the response hashmap.
25 SOAPElement serverUuid =
26   (SOAPElement) responseHeaders.get(new QName("com.rotbank.security","ServerUuid"));
27
28 //Note: "serverUuid" now equals a SOAPElement object that represents the 
29 //following code:
30//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
   </y:uuid></y:ServerUuid.");

In den Zeilen 2 und 3 werden neue HashMaps erstellt, die für die Anforderungs- und Antwort-SOAP-Header verwendet werden.

In den Zeilen 6 bis 10 werden die Headerelemente AtmUuid1 und AtmUuid2 zur Anforderungs-HashMap hinzugefügt.

In Zeile 15 wird der Name des Headerelements ServerUuid mit einem Nullwert zur Antwort-HashMap hinzugefügt.

In Zeile 18 wird die Anforderungs-HashMap als Eigenschaft im Stub-Objekt gesetzt. Das hat den Effekt, dass die Header AtmUuid1 und AtmUuid2 zu jeder Anforderungsnachricht, die einer im Stub-Objekt aufgerufenen Operation zugeordnet ist, hinzugefügt werden.

In Zeile 19 wird die Antwort-HashMap als Eigenschaft im Stub-Objekt gesetzt. Das hat den Effekt, dass der Header ServerUuid aus jeder Antwortnachricht, die einer im Stub-Objekt aufgerufenen Operation zugeordnet ist, extrahiert wird.

In Zeile 22 wird die Web-Service-Operation im Stub-Objekt aufgerufen.

In den Zeilen 25 und 26 wird der Header ServerUuid aus der Antwort-HashMap abgerufen. Der Header wurde von der Web-Service-Engine aus der Antwortnachricht extrahiert und in die HashMap eingefügt.


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_reqsoaphead
Dateiname:twbs_reqsoaphead.html