Envoi d'en-têtes SOAP implicites avec JAX-RPC
Vous pouvez activer un client de services Web JAX-RPC (Java™ API for XML-based RPC) existant 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
- 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).
Vous ne pouvez pas manipuler des en-têtes SOAP protégés. Un en-tête SOAP déclaré comme protégé par le composant qui le détient (par exemple : Sécurité des services Web) n'est pas accessible aux applications client. Si vous tentez de manipuler un en-tête SOAP protégé, vous obtiendrez une exception.
Pourquoi et quand exécuter cette tâche
L'application client définit les propriétés sur l'objet Stub ou Call pour envoyer et recevoir des en-têtes SOAP implicites.
Procédure
Résultats
Vous disposez maintenant d'un client de services Web JAX-RPC configuré pour envoyer des en-têtes SOAP implicites.
Exemple
L'exemple de programmation qui suit montre comment envoyer deux en-têtes SOAP de demande et recevoir un en-tête SOAP de réponse au sein d'une demande et d'une réponse de services Web :
1 //Créez les tables de hachage de demande et de réponse.
2 HashMap requestHeaders=new HashMap();
3 HashMap responseHeaders=new HashMap();
4
5 //Ajoutez "AtmUuid1" et "AtmUuid2" à la table de hachage de demande.
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 //Ajoutez "ServerUuid" à la table de hachage de réponse.
13 //Si "responseHeaders" est vide, tous les en-têtes SOAP sont
14 //extraits du message de réponse.
15 responseHeaders.put(new QName("com.rotbank.security","ServerUuid"), null);
16
17 //Définissez les propriétés sur l'objet Stub.
18 stub.setProperty(Constants.REQUEST_SOAP_HEADERS.requestHeaders);
19 stub.setProperty(Constants.RESPONSE_SOAP_HEADERS.responseHeaders);
20
21 //Appelez l'opération sur l'objet Stub.
22 stub.foo(parm2, parm2);
23
24 //Extrayez "ServerUuid" de la table de hachage de réponse.
25 SOAPElement serverUuid =
26 (SOAPElement) responseHeaders.get(new QName("com.rotbank.security","ServerUuid"));
27
28 //Note : "serverUuid" est désormais équivalent à un objet SOAPElement représenté par le
29 //code suivant :
30//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
</y:uuid></y:ServerUuid.");
Aux lignes 2 et 3, de nouvelles tables de hachage sont créées qui servent aux en-têtes SOAP de demande et de réponse.
Aux lignes 6 à 10, les éléments d'en-têtes AtmUuid1 et AtmUuid2 sont ajoutés à la table de hachage de demande.
A la ligne 15, le nom d'élément d'en-tête ServerUuid est ajouté à la table de hachage de réponse avec la valeur null.
A la ligne 18, la table de hachage de demande est définie comme propriété de l'objet Stub. Ainsi, les en-têtes AtmUuid1 et AtmUuid2 sont ajoutés à chaque message de demande qui est associé à une opération appelée sur l'objet Stub.
A la ligne 19, la table de hachage de réponse est définie comme propriété sur l'objet Stub. Ainsi, l'en-tête ServerUuid est extrait de chaque message de réponse qui est associé à une opération appelée sur l'objet Stub.
A la ligne 22, l'opération de services Web est appelée sur l'objet Stub.
Aux lignes 25 et 26, l'en-tête ServerUuid est extrait de la table de hachage de réponse. Cet en-tête a été extrait du message de réponse et inséré dans la table de hachage par le moteur de services Web.