Implizite SOAP-Header mit JAX-WS senden
Sie können einem vorhandenen JAX-WS-Web-Service-Client (Java™ API for XML-Based Web Services) 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 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.
Bei der Verwendung von JAX-WS gibt es keine Beschränkung der Headertypen, die Sie bearbeiten können.
Informationen zu diesem Vorgang
Die Clientanwendung legt die Eigenschaften im Dispatch- bzw. Proxy-Objekt fest, um implizite SOAP-Header zu senden und zu empfangen.
Vorgehensweise
Ergebnisse
Sie haben einen JAX-WS-Web-Service-Client, der für das Senden impliziter SOAP-Header konfiguriert ist.
Beispiel
1 //HashMap-Objekte für die SOAP-Header abgehender Anforderungen erstellen
2 Map<QName, List<String>> outboundHeaders=new HashMap<QName, List<String>>();
34 // "AtmUuid1" und "AtmUuid2" zur Zuordnung abgehender Anforderungen hinzufügen
5 List<String> list1 = new ArrayList<String>();
6 list1.add("<AtmUuid1 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
7 List<String> list2 = new ArrayList<String>();
8 list2.add("<AtmUuid2 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid2>"
9 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid1"), list1);
10 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid2"), list2);
11 // Zuordnung abgehender Anforderungen im Anforderungskontext definieren
12 dispatch.getRequestContext().put("jaxws.binding.soap.headers.outbound");
13 // Ferne Operation aufrufen
14 dispatch.invoke(parm1);
15 // Headerzuordnung eingehender Anforderungen aus dem Antwortkontext abrufen
16 Map<QName,List<String>> inboundMap = dispatch.getResponseContext().get("jaxws.binding.soap.headers.outbound");
17 List<String> serverUuidList = inboundMap.get(new QName("com.rotbank.security","ServerUuid"));
18 String text = serverUiidList.get(0);
19 //Anmerkung: Der Text gleicht jetzt einem XML-Objekt, das einen SOAP-Header enthält:
21//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
22 </y:uuid></y:ServerUuid.");
Erstellen Sie in Zeile 2 die SOAP-Header-Zuordnung abgehender Anforderungen.
In den Zeilen 5 bis 10 werden die Headerelemente AtmUuid1 und AtmUuid2 zur Zuordnung abgehender Anforderungen hinzugefügt.
In der Zeile 12 wird die Zuordnung abgehender Anforderungen im Anforderungskontext definiert, was zur Folge hat, dass die Header AtmUuid1 und AtmUuid2 zur Anforderungsnachricht hinzugefügt werden, wenn die Operation aufgerufen wird.
Rufen Sie in Zeile 14 die ferne Operation auf.
Rufen Sie in Zeile 15 die Headerzuordnung abgehender Anforderungen ab.
In den Zeilen 17-18 wird der ServerUuid-Header von der Anforderungszuordnung abgerufen. Die Zuordnung greift über die Antwortnachricht auf den SOAP-Header zu.