Base de connaissances > Automation Engine et systèmes cibles > Java EE/JMX > Envoi de messages SOAP à l'aide de MBeans

Envoi de messages SOAP à l'aide de MBeans

Voici un exemple de message SOAP pour consulter les cours des actions.

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:getQuote soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="urn:xmethods-delayed-quotes">
<symbol xsi:type="xsd:string">IBM</symbol>
</ns1:getQuote></soapenv:Body>
</soapenv:Envelope>

Le message SOAP doit être envoyé avec l'action SOAP suivante : "urn:xmethods-delayed-quotes#getQuote"  

L'URL du service web est : http://services.xmethods.net/soap

Un MBean peut être utilisé pour l'envoi de ce message SOAP. Le MBean nécessite au moins Java version 5. Ajoutez tout d'abord le MBean au chemin de classe de l'agent :

  1. Copiez le fichier soapmbean.jar dans le dossier de l'agent JMX.
  2. Démarrez l'agent JMX avec le fichier soapmbean.jar dans le chemin de classe.
    java -cp soapmbean.jar;ucxjjmx.jar com/uc4/ex/jmx/UCXJMX

Créez un Job JMX et ajoutez la ligne suivante dans l'onglet Traitement :

JMX_CREATE_MBEAN EXISTS="IGNORE",CLASSNAME="com.uc4.ex.jmx.soap.SOAP",NAME="uc4.com:name=SOAP"

Démarrez le Job. Dans le navigateur MBean, un MBean du nom de "SOAP" est affiché.

Il faut ensuite définir le JCL pour l'utilisation du MBean SOAP :

JMX_CREATE_MBEAN EXISTS="IGNORE",CLASSNAME="com.uc4.ex.jmx.soap.SOAP",NAME="uc4.com:name=SOAP"
JMX_COMPOSITE_ADD KEY="1",VALUE='<?xml version="1.0" encoding="UTF-8"?>',NAME="s"
JMX_COMPOSITE_ADD KEY="2",VALUE='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="3",VALUE='xmlns:xsd="http://www.w3.org/2001/XMLSchema" ',NAME="s"
JMX_COMPOSITE_ADD KEY="4",VALUE='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',NAME="s"
JMX_COMPOSITE_ADD KEY="5",VALUE="<soapenv:Body><ns1:getQuote ",NAME="s"
JMX_COMPOSITE_ADD KEY="6",VALUE='soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="7",VALUE='xmlns:ns1="urn:xmethods-delayed-quotes">',NAME="s"
JMX_COMPOSITE_ADD KEY="8",VALUE='<symbol xsi:type="xsd:string">IBM</symbol>',NAME="s"
JMX_COMPOSITE_ADD KEY="9",VALUE="</ns1:getQuote></soapenv:Body></soapenv:Envelope>",NAME="s"
JMX_INVOKE OPERATIONNAME="sendSOAP",MBEAN="uc4.com:name=SOAP",PARAMS='s,"urn:xmethods-delayed-quotes#getQuote",http://services.xmethods.net/soap'

La première ligne s'assure que le MBean exsite ou le charge si nécessaure. Les instructions JMX_COMPOSITE_ADD contiennent le message SOAP ligne par ligne. Le paramètre KEY= contient les numéros de ligne. Une fois le message SOAP assemblé, il est transmis comme premier paramètre à l'opération "sendSOAP" (JMX_INVOKE). Le deuxième paramètre contient l'action SOAP et le troisième paramètre contient l'URL à laquelle la requête SOAP doit être envoyée.

Exécutez le Job. Le rapport de Job affiche le message réponse.

Vous pouvez utiliser l'instruction XPath pour lire une seule valeur. Pour cela, insérez une nouvelle ligne de script avec l'élément de script JMX_COMPOSITE_ADD contenant l'instruction "XPATH" pour KEY= et la valeur recherchée pour VALUE= (voir la deuxième ligne du script). Le script ressemble alors à ce qui suit :

JMX_CREATE_MBEAN EXISTS="IGNORE",CLASSNAME="com.uc4.ex.jmx.soap.SOAP",NAME="uc4.com:name=SOAP"
JMX_COMPOSITE_ADD KEY="XPATH",VALUE="//Result",NAME="s"
JMX_COMPOSITE_ADD KEY="1",VALUE='<?xml version="1.0" encoding="UTF-8"?>',NAME="s"
JMX_COMPOSITE_ADD KEY="2",VALUE='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="3",VALUE='xmlns:xsd="http://www.w3.org/2001/XMLSchema" ',NAME="s"
JMX_COMPOSITE_ADD KEY="4",VALUE='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',NAME="s"
JMX_COMPOSITE_ADD KEY="5",VALUE="<soapenv:Body><ns1:getQuote ",NAME="s"
JMX_COMPOSITE_ADD KEY="6",VALUE='soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="7",VALUE='xmlns:ns1="urn:xmethods-delayed-quotes">',NAME="s"
JMX_COMPOSITE_ADD KEY="8",VALUE='<symbol xsi:type="xsd:string">IBM</symbol>',NAME="s"
JMX_COMPOSITE_ADD KEY="9",VALUE="</ns1:getQuote></soapenv:Body></soapenv:Envelope>",NAME="s"
JMX_INVOKE OPERATIONNAME="sendSOAP",MBEAN="uc4.com:name=SOAP",PARAMS='s,"urn:xmethods-delayed-quotes#getQuote",http://services.xmethods.net/soap'

Sur la base du script d'exemple, le rapport du job affiche maintenant une valeur.

Vous pouvez également compléter des parties du message SOAP à l'aide de variables de script. Dans l'exemple suivant, une valeur est lue avec un masque :READ :

Onglet Pré-traitement :

:READ &SYMBOL#,"IBM,SAP,ORCL","Please choose one","IBM"

Onglet Traitement :

La variable de script &SYMBOL# est utilisée à la ligne 10 :

JMX_CREATE_MBEAN EXISTS="IGNORE",CLASSNAME="com.uc4.ex.jmx.soap.SOAP",NAME="uc4.com:name=SOAP"
JMX_COMPOSITE_ADD KEY="XPATH",VALUE="//Result",NAME="s"
JMX_COMPOSITE_ADD KEY="1",VALUE='<?xml version="1.0" encoding="UTF-8"?>',NAME="s"
JMX_COMPOSITE_ADD KEY="2",VALUE='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="3",VALUE='xmlns:xsd="http://www.w3.org/2001/XMLSchema" ',NAME="s"
JMX_COMPOSITE_ADD KEY="4",VALUE='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',NAME="s"
JMX_COMPOSITE_ADD KEY="5",VALUE="<soapenv:Body><ns1:getQuote ",NAME="s"
JMX_COMPOSITE_ADD KEY="6",VALUE='soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" ',NAME="s"
JMX_COMPOSITE_ADD KEY="7",VALUE='xmlns:ns1="urn:xmethods-delayed-quotes">',NAME="s"
JMX_COMPOSITE_ADD KEY="8",VALUE='<symbol xsi:type="xsd:string">&SYMBOL#</symbol>',NAME="s"
JMX_COMPOSITE_ADD KEY="9",VALUE="</ns1:getQuote></soapenv:Body></soapenv:Envelope>",NAME="s"
JMX_INVOKE OPERATIONNAME="sendSOAP",MBEAN="uc4.com:name=SOAP",PARAMS='s,"urn:xmethods-delayed-quotes#getQuote",http://services.xmethods.net/soap'