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

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

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

  1. Créez un objet java.util.HashMap.
  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 soit un objet SAAJ SOAPElement, soit une chaîne contenant le texte XML de l'élément d'en-tête SOAP.
  3. Définissez l'objet HashMap en tant que propriété sur l'objet Stub ou Call. Le nom de la propriété est com.ibm.websphere.webservices.Constants.REQUEST_SOAP_HEADERS. La valeur de la propriété est HashMap.
  4. Lancez les appels de méthode distante à l'aide de l'objet Stub ou Call. Les en-têtes de l'objet HashMap sont envoyés dans le message sortant.
    Une erreur JAXRPCException peut se produire dans les cas suivants :
    • L'objet HashMap contient qui n'est pas un objet QName, ou l'objet HashMap contient une valeur qui n'est pas une chaîne ni un objet SOAPElement.
    • L'objet 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 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.


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_reqsoaphead
Nom du fichier : twbs_reqsoaphead.html