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.
- 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
Résultats
Vous disposez d'un client de services Web JAX-WS configuré pour envoyer des en-têtes SOAP implicites.
Exemple
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.