AXIS lire le contenu du message SOAP HTTP
Par PlaceOweb le dimanche, novembre 30 2008, 12:37 - JAVA - Lien permanent
Comment afficher le contenu SOAP : enveloppe (Envelope), entêtes (Header), corps (Body) et attachements (Attachments) binaires , lors de l'envoi d'un WebService (WS) et de sa réponse ?
Pour détailler le flux SOAP on les choix suivants :
Java code
Dans le stub (SoapBindingStub), lors de l'appel (call) d'un service (méthode)
System.err.println("RequestMessage MessageType:"+_call.getMessageContext().getRequestMessage().getMessageType()); System.err.println("RequestMessage SOAPEnvelope:"+_call.getMessageContext().getRequestMessage().getSOAPEnvelope()); System.err.println("RequestMessage SOAPHeader:"+_call.getMessageContext().getRequestMessage().getSOAPHeader()); System.err.println("RequestMessage SOAPBody:"+_call.getMessageContext().getRequestMessage().getSOAPBody()); System.err.println("RequestMessage SOAPPartAsString:"+_call.getMessageContext().getRequestMessage().getSOAPPartAsString()); System.err.println("ResponseMessage MessageType:"+_call.getMessageContext().getResponseMessage().getMessageType()); System.err.println("ResponseMessage SOAPEnvelope:"+_call.getMessageContext().getResponseMessage().getSOAPEnvelope()); System.err.println("ResponseMessage SOAPHeader:"+_call.getMessageContext().getResponseMessage().getSOAPHeader()); System.err.println("ResponseMessage SOAPBody:"+_call.getMessageContext().getResponseMessage().getSOAPBody()); System.err.println("ResponseMessage SOAPPartAsString:"+_call.getMessageContext().getResponseMessage().getSOAPPartAsString());
RequestMessage MessageType:null RequestMessage SOAPEnvelope:<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><ServiceWeb xmlns="urn:www.placeoweb.com"><in0><ns1:dateEnvoi xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T09:04:15.437Z</ns1:dateEnvoi><ns2:devis xmlns:ns2="http://echangee.www.placeoweb.com"><ns2:client><ns2:batiment xsi:nil="true"/><ns2:codePostal xsi:nil="true"/> ... </in0></ServiceWeb></soapenv:Body></soapenv:Envelope> RequestMessage SOAPHeader: RequestMessage SOAPBody:<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ServiceWeb xmlns="urn:www.placeoweb.com"><in0><ns1:dateEnvoi xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T09:04:15.437Z</ns1:dateEnvoi><ns2:devis xmlns:ns2="http://echangee.www.placeoweb.com"><ns2:client><ns2:batiment xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><ns2:codePostal xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> ... </in0></ServiceWeb></soapenv:Body> RequestMessage SOAPPartAsString:<?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><ServiceWeb xmlns="urn:www.placeoweb.com"><in0><ns1:dateEnvoi xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T09:04:15.437Z</ns1:dateEnvoi><ns2:devis xmlns:ns2="http://echangee.www.placeoweb.com"><ns2:client><ns2:batiment xsi:nil="true"/><ns2:codePostal xsi:nil="true"/> ... </in0></ServiceWeb></soapenv:Body></soapenv:Envelope> ResponseMessage MessageType:response ResponseMessage SOAPEnvelope:<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><ServiceWebResponse xmlns="urn:www.placeoweb.com"><ServiceWebReturn><ns1:dateRetour xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T08:59:33.977Z</ns1:dateRetour></ServiceWebReturn></ServiceWebResponse></soapenv:Body></soapenv:Envelope> ResponseMessage SOAPHeader: ResponseMessage SOAPBody:<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ServiceWebResponse xmlns="urn:www.placeoweb.com"><ServiceWebReturn><ns1:dateRetour xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T08:59:33.977Z</ns1:dateRetour></ServiceWebReturn></ServiceWebResponse></soapenv:Body> ResponseMessage SOAPPartAsString:<?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><ServiceWebResponse xmlns="urn:www.placeoweb.com"><ServiceWebReturn><ns1:dateRetour xmlns:ns1="http://echangee.www.placeoweb.com">2010-04-16T08:59:33.977Z</ns1:dateRetour></ServiceWebReturn></ServiceWebResponse></soapenv:Body></soapenv:Envelope>
Logger
Lancer votre programme avec un logger log4j, avec les arguments et fichier suivants :
-Dlog4j.configuration="file:/C:/workspaceEclipse/log4j/log4j.properties"
log4j.properties :
#http://beuss.developpez.com/tutoriels/java/jakarta/log4j/ #http://wiki.mediabox.fr/tutoriaux/java/log4j #définition du niveau et des Appender du rootLogger log4j.rootLogger=DEBUG, monAppender, stdout #configuration de "monAppender" #nous allons envoyer les messages dans la console de Tomcat log4j.appender.monAppender=org.apache.log4j.ConsoleAppender #log4j.appender.monAppender=org.jboss.logging.log4j.ConsoleAppender #définition du Layout pour "monAppender" log4j.appender.monAppender.layout=org.apache.log4j.PatternLayout #définition du pattern d'affichage pour "monAppender" #voici un exemple de sortie que l'on va obtenir : 2005-06-18 14:53:37 DEBUG [Main] Hello World log4j.appender.monAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} %m%n #log4j.appender.monAppender.layout.ConversionPattern=%c{1} %m%n # Si par exemple je veux modifier le niveau de logging des classes se trouvant # dans le package com.liguo.layout, # je n'ai qu'a ajouter la ligne suivante dans le fichier de configuration #log4j.logger.com.liguo.layout=WARN log4j.logger=INFO log4j.logger.com=ALL log4j.logger.com.placeoweb=ALL log4j.logger.org=INFO #log4j.logger.org=ALL #log4j.logger.org.apache.axis.transport.http.HTTPSender=DEBUG, axisLogFile log4j.logger.org.apache.axis.transport.http.HTTPSender=DEBUG
Résultat du log :
2010-04-16 11:13:54 DEBUG [HTTPSender] Enter: HTTPSender::invoke 2010-04-16 11:13:55 DEBUG [HTTPSender] XML sent: 2010-04-16 11:13:55 DEBUG [HTTPSender]--- 2010-04-16 11:13:55 DEBUG [HTTPSender] POST /uri/services/ServiceWeb HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.4 Host: 81.255.92.77 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 5025 <?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><ServiceWeb xmlns="urn:ww.placeoweb.com"><in0><ns1:dateEnvoi xmlns:ns1="http://echangee.ww.placeoweb.com">2010-04-16T09:13:54.015Z</ns1:dateEnvoi> ... </in0></ServiceWeb></soapenv:Body></soapenv:Envelope> 2010-04-16 11:14:03 DEBUG [HTTPSender] HTTP/1.1 200 OK 2010-04-16 11:14:03 DEBUG [HTTPSender] Date Fri, 16 Apr 2010 09:13:21 GMT 2010-04-16 11:14:03 DEBUG [HTTPSender] Server Apache 2010-04-16 11:14:03 DEBUG [HTTPSender] Set-Cookie SMSESSION=9GXw3KrdlN7NIk8+gZV3P6MRgo1loLn/b7QDRLz0kowRUqvH8LVlA+rMSZgkLkGcD10eq9F+A4QuEbxMg3ZYpuY/3WbglJ9cZwd1/BxKHPasFS27pbgWXcEO54k/NqsDhKh6+2gf/hy6QtvfA2NVwTbxWihJzLZwAHyLYyRTVAvVieIlgPHLV/AVBSEkQ+ra7eqJAouaRXzU29HkPQP/2HQ/SL9OHF1TwKwQlaO7Rx91DQLmL6xKE4diDnWp2vU5/qYDXyGLgaQNbtAfATSlwvbTqyWcRwCLl8nE8MwpsDDW2PjDVVtQCx8gDl7Z+Q/Q/NqOKEBq6MGrfYDqdmlD5t59JY/okh1ZvkFDpFJ79El7PpJUvRXn9jR3GwwD8IMd2/0rxN2No2luUVqn+z8pVN3lQugIb2yp9dGGfJ56I2ASoWuS8NIAIVJCgrR7Ehs2EOGyIAhxZt5qkouJioOgL7BQlteby5QA/FM7D99NNjMXXXqdk2tboFfBUlqG+Vd4HKvkwQHV0OeiQvtJ3+Utinh1QffLyNwp4yI6sY2mLuXydkcXQqhdd6WSgNSGebwUHhDNn/uAqM7KoZAgny8oP3jKZW/xZItVJZyLYY4HHevSqZH3OcFAT4jZ0jCbnnRmjiA7QKzvzn5S8zMNMIOTRgcD7s682ra0yBlXjR8bu/W7jFmabntvzp5z/0+Lp3LrJIHqffpSWPPBqcsypUzObQYgJ/6QOCx6u7+JUFZ4X166rD6iFouLTmcFPiddDOGo1nRh+mS5dZJUD7DqQO+Umv3OEwhlPLr81HoTm4P7wwNe5HY0QejB8oImwcwEcr03TdrCww8BBbX3kbMgaYtGNS6Ylm9DDp5OZ9eb3j/qVIgJArwPn04k1fjWzYqa2aS4btd0q1uPOZ06MganCnQgKfGbKICEWKhnzyIEBURAOoYUa7eOi2mcaJVKC/1I+YrPqF/1rXZLA8bSnZkza53uI0P+1WMSykpxMHvTcVQv+a1I9mVsV4mOlrDL8bUOmn8EYUl0Dvuh2LEJ7zxtFXL2W5JsfayXfNX5udeYhK6vZhzap6KgekVCKqxPl508f6WB; path=/; domain=.placeoweb.fr 2010-04-16 11:14:03 DEBUG [HTTPSender] Set-Cookie SMIDENTITY=/VM8ZHqqahrH02D32mkQqNVBVRcu5qwh5QN6GjwIufsUqg5X92oiYLXmQmeBy49l4yrZMuk7XD5ONlThv4RkbAvK61FL8KEIY7ErcelxLWkeRhNM48N8Apyz2E+/CY91+DbWI+5YP+CBgy0cztJadvVMf5bppSica8v7CPUYzvUqEoIg9kQVrnvaGs90eoCHnAXe4YyrQEalKM1C5rDCsAd43E299+yg8lTRrwWQERP6Cq1OMe/5Ndhuhvmlsv4TT5pMdj9fRJWSN2Y9uwcRFVg0zk3hnMp4zw+D7XUdNwmzGyQzZbPENyIM5IszBejRzWWDn/8YOZ4Fbpo9y+7A1xnPfmTeW2Wp1EUhSU4Yf0FXn9H4pfmi9HqkC0/LrcwG8reHRB2s3Clu3kWvOFXHIaDZOHSja2JcvbfAGUCQUfaEAtAFUjktTdt4h82b7Vcqnbg97hNNPrFL4/5LP+pzk1Tfyv1vgF6tjIcgykwikXjoT52FTEdMB1fNW+isRD/NNmNpjAiXtXceIeo0qTgsqw5nUQ2hwYTxOC8TgBy1fLbP5EnoTw3SNNlXSNfTJUgWCeMCCg423KbiyiT7c9BK3hEgFtBz20blc/ee7bY6os+vYg+uwswyeyGJjWP9BuNG0vXopyIapSkcVLIS8DqR7umv1ANiym9zv+XuOChzTZInIm/Z0G+QvuoXJKLhc5+M; path=/; domain=.placeoweb.fr 2010-04-16 11:14:03 DEBUG [HTTPSender] Content-Type text/xml 2010-04-16 11:14:03 DEBUG [HTTPSender] Via 1.1 b2b-internet-soap-xmlfirewall 2010-04-16 11:14:03 DEBUG [HTTPSender] Warning 214 b2b-internet-soap-xmlfirewall DataPower Transformation Applied 2010-04-16 11:14:03 DEBUG [HTTPSender] Connection close 2010-04-16 11:14:03 DEBUG [HTTPSender] no Content-Length 2010-04-16 11:14:03 DEBUG [HTTPSender] XML received: 2010-04-16 11:14:03 DEBUG [HTTPSender]--- 2010-04-16 11:14:03 DEBUG [HTTPSender] <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><ServiceWebResponse xmlns="urn:ww.placeoweb.com"><ServiceWebReturn><ns1:dateRetour xmlns:ns1="http://echangee.ww.placeoweb.com">2010-04-16T09:09:20.933Z</ns1:dateRetour> ... </ServiceWebReturn></ServiceWebResponse></soapenv:Body></soapenv:Envelope> 2010-04-16 11:14:03 DEBUG [HTTPSender] Exit: HTTPDispatchHandler::invoke
Loguer sous Jboss les appels client Axis (émetteurs requête et réponse )
Jboss 4 : Loguer sous Jboss 4 les appels client Axis (émetteurs requête et réponse )
<!-- ==================== --> <!-- APPENDER DE WS AXIS --> <!-- ==================== --> <appender name="AXIS_WS" class="org.jboss.logging.appender.RollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log/axis.ws.log"/> <param name="Append" value="true"/> <!--<param name="DatePattern" value="'.'yyyy-MM-dd"/>--> <param name="MaxBackupIndex" value="10"/> <param name="MaxFileSize" value="100MB"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <category name="org.apache.axis.transport.http.HTTPSender" additivity="false"> <priority value="DEBUG"/> <appender-ref ref="AXIS_WS"/> </category>
Jboss 6 : Loguer sous Jboss 6 les appels client Axis (émetteurs requête et réponse )
<logger category="org.apache.axis.transport.http.HTTPSender" use-parent-handlers="false" additivity="false"> <level name="DEBUG" /> <handlers> <handler-ref name="AXIS_WS"/> </handlers> </logger>
Loguer sous Jboss ce que l'on a reçu en tant que serveur AXIS
Jboss 4 : Loguer sous Jboss 4 ce que l'on a reçu en tant que serveur AXIS (requête émise - sans la réponse)
<category name="org.apache.axis.providers.java.RPCProvider"> <priority value="ALL"/> </category>
2010-04-16 12:37:23,250 DEBUG [org.apache.axis.providers.java.RPCProvider] body is <ServiceWeb ... FLUX SOAP
Jboss 6 : Loguer sous Jboss 6 ce que l'on a reçu en tant que serveur AXIS (requête émise - sans la réponse)
<logger category="org.apache.axis.providers.java.RPCProvider" use-parent-handlers="false" additivity="false"> <level name="DEBUG"/> <handlers> <handler-ref name="AXIS_WS"/> </handlers> </logger>
Autres alternatives externes
Analyse du flux réseau avec Wireshark (anciennement Ethereal) qui est un logiciel libre d'analyse de protocole,
Ressources
- Axis Developer's Guide
- Class SOAPMessage
- Java by API » javax.xml.soap » SOAPMessage