Envoi d'en-têtes SOAP implicites avec JAX-WS

Vous pouvez activer un client de services Web JAX-WS (Java™ API for XML-Based Web Services) pour envoyer des valeurs dans des en-têtes SOAP implicites. En modifiant le code du client pour l'envoi d'en-têtes SOAP implicites, vous pouvez envoyer des informations spécifiques dans une requête de service Web sortante.

Avant de commencer

Pour effectuer cette tâche, vous devez disposer d'un client de services Web pouvant être activé pour l'envoi d'en-têtes SOAP implicites.

Un en-tête SOAP implicite est un en-tête SOAP correspondant à l'une des descriptions suivantes :
  • Partie de message déclarée en tant qu'en-tête SOAP dans la liaison du fichier WSDL (Web Services Description Language), mais la définition du message n'est pas référencée par un élément portType dans un fichier WSDL.
  • Elément non contenu dans le fichier WSDL.

Les gestionnaires et les noeuds finaux de service peuvent manipuler des en-têtes SOAP implicites ou explicites à l'aide du modèle de données SAAJ (Java).

Avec JAX-WS, il n'existe aucune restriction sur les types de gestionnaires que vous pouvez manipuler.

Pourquoi et quand exécuter cette tâche

L'application client définit les propriétés sur l'objet Dispatch ou Proxy pour envoyer et recevoir des en-têtes SOAP implicites.

Procédure

  1. Créez un objet java.util.HashMap<QName, List<String>>.
  2. Ajoutez une entrée à l'objet HashMap pour chaque en-tête SOAP implicite que le client souhaite envoyer. La clé d'entrée HashMap est le QName de l'en-tête SOAP. La valeur d'entrée HashMap est un objet List<String> et chaque chaîne représente le texte XML de l'ensemble de l'élément d'en-tête SOAP. En utilisant l'objet List<String>, vous pouvez ajouter plusieurs éléments d'en-tête SOAP doté du même QName.
  3. Définissez l'objet HashMap en tant que propriété sur le contexte de demande de l'objet Dispatch ou Proxy. Le nom de la propriété est com.ibm.wsspi.websvcs.Constants.JAXWS_OUTBOUND_SOAP_HEADERS. La valeur de la propriété est HashMap.
  4. Lancez les appels de méthode distante à l'aide de l'objet Dispatch ou Proxy. Les en-têtes de l'objet HashMap sont envoyés dans le message sortant.
    Une erreur WebServiceException peut se produire dans les cas suivants :
    • L'objet HashMap contient une clé qui n'est pas un objet QName ou l'objet HashMap contient une valeur qui n'est pas un objet List<String>
    • La chaîne représentant un en-tête SOAP n'est pas un message XML compatible.
    • Le HashMap contient une clé qui représente un en-tête SOAP déclaré comme protégé par le composant qui le détient.

Résultats

Vous disposez d'un client de services Web JAX-WS configuré pour envoyer des en-têtes SOAP implicites.

Exemple

L'exemple de programmation qui suit explique comment paramétrer deux en-têtes SOAP de demande et extraire un en-tête SOAP de réponse au sein d'une demande et d'une réponse de services Web JAX-WS :
1  //Créez les tables de hachage pour des en-têtes SOAP sortants
2  Map<QName, List<String>> outboundHeaders=new HashMap<QName, List<String>>(); 
3
4  //Ajoutez "AtmUuid1" et "AtmUuid2" à la mappe sortante
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 // Définissez la mappe sortante sur le contexte de demande
12 dispatch.getRequestContext().put("jaxws.binding.soap.headers.outbound");
13 // Appelez l'opération distante
14 dispatch.invoke(parm1);
15 // Récupérez la mappe d'en-tête entrante à partir du contexte de réponse
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 //Remarque : le texte est maintenant équivalent à un objet XML qui contient un en-tête SOAP :
21//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
22  </y:uuid></y:ServerUuid.");

Sur la ligne 2, créez la mappe d'en-tête SOAP sortante.

Sur les lignes 5 à 10, les éléments des en-têtes AtmUuid1 et AtmUuid2 sont ajoutés à la mappe sortante.

Sur la ligne 12, la mappe sortante est définie sur le contexte de demande, ce qui cause l'ajout des en-têtes AtmUuid1 et AtmUuid2 au message de la demande lorsque l'opération est appelée.

Sur la ligne 14, appelez l'opération distante.

Sur la ligne 15, récupérez la mappe d'en-tête sortante.

Sur les lignes 17 à 18, l'en-tête ServerUuid est extrait de la mappe de réponse. La mappe accède à l'en-tête SOAP à partir du message de réponse.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_reqsoapheadjaxws
Nom du fichier : twbs_reqsoapheadjaxws.html