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
- 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
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.