IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Capturer les message SOAP envoyé par le code client


Sujet :

Services Web Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Capturer les message SOAP envoyé par le code client
    Bsr ,

    je dispose d'un web servcie deja installé sur un environnement unix ,
    j'ai generé les stubs clients pour developper une application qui envoi à ce webservice des requetes en masse .
    j'ai besoin de sauvegarder les message envoyé ainsi que la reponse (input & output ) du webservice dans le format xml ce qui revient à capturer les messages SOAP envoyé et récu par l'application cliente.

    j'ai utilisé ant pour generer mes stubs client
    une fonction qui appele les webservice et dont je veu recueperer le message q'eele envoi à intialement cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
        public AddTicklerOut addTickler(AddTicklerIn in5) throws java.rmi.RemoteException {
            if (super.cachedEndpoint == null) {
                throw new org.apache.axis.NoEndPointException();
            }
            org.apache.axis.client.Call _call = createCall();
            _call.setOperation(_operations[5]);
            _call.setUseSOAPAction(true);
            _call.setSOAPActionURI("");
            _call.setEncodingStyle(null);
            _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
            _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
            _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
            _call.setOperationName(new javax.xml.namespace.QName("", "addTickler"));
     
            SetSecureheader(_call);
            setRequestHeaders(_call);
            setAttachments(_call);
     
     
     try {        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {in5});
     
            if (_resp instanceof java.rmi.RemoteException) {
                throw (java.rmi.RemoteException)_resp;
            }
            else {
                extractAttachments(_call);
                try {
                    return (addtickler.AddTicklerOut) _resp;
                } catch (java.lang.Exception _exception) {
                    return (addtickler.AddTicklerOut) org.apache.axis.utils.JavaUtils.convert(_resp, addtickler.AddTicklerOut.class);
                }
            }
      } catch (org.apache.axis.AxisFault axisFaultException) {
      throw axisFaultException;
    }
          }
    J'ai essaye de faire ce qui suit pour afficher au moins le messsage envoyé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
        public AddTicklerOut addTickler(AddTicklerIn in5) throws java.rmi.RemoteException {
            if (super.cachedEndpoint == null) {
                throw new org.apache.axis.NoEndPointException();
            }
            org.apache.axis.client.Call _call = createCall();
            _call.setOperation(_operations[5]);
            _call.setUseSOAPAction(true);
            _call.setSOAPActionURI("");
            _call.setEncodingStyle(null);
            _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
            _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
            _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
            _call.setOperationName(new javax.xml.namespace.QName("", "addTickler"));
    
            SetSecureheader(_call);
            setRequestHeaders(_call);
            setAttachments(_call);
           /****/
    	System.out.println("RequestMessage SOAPBody:"+_call.getMessageContext().getRequestMessage().getSOAPBody()
            /****/
    
     try {        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {in5});
    
            if (_resp instanceof java.rmi.RemoteException) {
                throw (java.rmi.RemoteException)_resp;
            }
            else {
                extractAttachments(_call);
                try {
                    return (com.alcatel.mbn.ws.beans.generaldomain.addtickler.AddTicklerOut) _resp;
                } catch (java.lang.Exception _exception) {
                    return (addtickler.AddTicklerOut) org.apache.axis.utils.JavaUtils.convert(_resp, addtickler.AddTicklerOut.class);
                }
            }
      } catch (org.apache.axis.AxisFault axisFaultException) {
      throw axisFaultException;
    }
      
        }
    Avec ça j'ai tiujours le null pointer exception error il parait que _call.getMesageContext retourne null toujours

    en fait j'ai pas une grande experience en ce genre de truc
    est quelqu'un a dejà travailler sur ce genre de problems.

    Merci Bien

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Applicativement, je ne sais pas le faire.

    Par contre, avec d'autres logiciels, tu peux capturer la requête en entrée et en sortie : tcp monitor et SOAP Monitor.

    Pour ma part, j'ai déjà utilisé TCP monitor sous Eclipse pour récupérer les requêtes SOAP envoyées et reçues.
    Dans mon cas, la requête apparaissait dans une interface graphique, elle n'était pas sauvegardée immediatement dans un fichier. Je pouvais la copier et la mettre dans un fichier pour la sauvegarder.

    Bon courage

    Arnaud

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    bjr Aranud ,

    Merci pour la reponse , je connais deja le Tcp monitor je l'ai déja utlilisé
    mais le besoin ici ce n'est pas juste de voir la requetes mais c'est de les capturer et les inserer dans une table pour des raisons de retry

    en fait je crois que ce n'est pas possible de capturer ses messages, j'ai verifier les codes dans les jar files d'axis (axis.jar) et j'ai remarqué que toutes le operations de la constitution des messages soap sont encapsulé dans le jar et y' a pas de possibilité de les accède par un code externe.

    pour le moment je me contente de serialiser les objets input et output des WS avec XSTRAM et des les insere dans la BD , c'est tjs mieu que rien

    tu trouvera ici le code de axis.jar si ça t'interesse

    http://grepcode.com/file/repository....va.lang.Object[])

    merci

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Enfin j'ai trouvé , en fait c 'est bien possible de capturer les message SOAP envoyé et reçus

    voila le code magique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //declaration et init des variables
    GeneralDomainManagerServiceLocator gdmsl= new GeneralDomainManagerServiceLocator();
    gdmsl.setGeneralDomainManagerEndpointAddress(generalDomain);
    gdmgr=gdmsl.getGeneralDomainManager();
    
    //la ligne magique 			 
    gdmStub = (org.apache.axis.client.Stub)gdmgr; 
    try {
    // appeler le web service 
    AddTicklerOut tickOut=gdmgr.addTickler(ticklerIn);
    //capturer le dernier call du stub 			 
    Call prevCall = gdmStub._getCall();	
    //affecter les message soap a des variables String  wsIn=prevCall.getMessageContext().getRequestMessage().getSOAPPartAsString();	  wsOut=prevCall.getMessageContext().getResponseMessage().getSOAPPartAsString();
    //la les soap requests sont affiché dans les logs 	 
    LOGGER.debug("tickler in :"+wsIn);
    LOGGER.debug("tickler out:"+wsOut);
    }
    } catch (RemoteException e) {
    // il faut aussi dupliquer le même code en gras dans la section catch de l'exception RemoteException  }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/10/2008, 18h30
  2. Capturer les messages des autres fenêtres
    Par JulienDuSud dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 10/10/2008, 13h22
  3. [Zimbra] Faire l'Upload d'un fichier avec les messages SOAP
    Par CristinaB dans le forum Services Web
    Réponses: 1
    Dernier message: 02/06/2008, 13h07
  4. Récuperer les messages d'erreurs dans le code
    Par TSalm dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/06/2007, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo