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

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

  1. Erstellen Sie ein Objekt java.util.HashMap<QName, List<Zeichenfolge>>.
  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 Objekt List<Zeichenfolge>. "Zeichenfolge" steht für den XML-Text des vollständigen SOAP-Header-Elements. Wenn Sie das Objekt List<Zeichenfolge> verwenden, können Sie mehrere SOAP-Header-Elemente hinzufügen, die dasselbe QName-Objekt haben.
  3. Legen Sie das HashMap-Objekt als Eigenschaft im Anforderungskontext des Dispatch- bzw. Proxy-Objekts fest. Der Eigenschaftsname ist "com.ibm.wsspi.websvcs.Constants.JAXWS_OUTBOUND_SOAP_HEADERS". Der Eigenschaftswert ist "HashMap".
  4. Setzen Sie die Remote-Methodenaufrufe über das Dispatch- bzw. Proxy-Objekt ab. Die Header im HashMap-Objekt werden in der abgehenden Nachricht gesendet.
    Es kann ein Fehler vom Typ "WebServiceException" auftreten, 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 Objekt List<Zeichenfolge> ist.
    • Die Zeichenfolge, die einen SOAP-Header darstellt, ist keine kompatible XML-Nachricht.
    • 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-WS-Web-Service-Client, der für das Senden impliziter SOAP-Header konfiguriert ist.

Beispiel

Das folgende Programmierbeispiel veranschaulicht, wie in einer JAX-WS-Web-Service-Anforderung und einem Antwortkontext zwei Anforderungs-SOAP-Header festgelegt und ein Antwort-SOAP-Header abgerufen werden können:
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.


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_reqsoapheadjaxws
Dateiname:twbs_reqsoapheadjaxws.html