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 :

Paramètres appel web service


Sujet :

Services Web Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut Paramètres appel web service
    Bonjour !

    Je suis en train de réaliser un client qui doit effectuer des appels à plusieurs web services différents. (avec axis 1.4)
    Seulement je ne suis pas sûr de comprendre le fonctionnement des passages de paramètres, le type de retour etc...

    voici mon code actuel :
    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
    try {
    	//étape 1 : création d'accès vers le service
    	Service service = new Service();
     
    	//étape 2 :création d'un appel vers le service
    	Call call = (Call)service.createCall();//new javax.xml.namespace.QName("http://ejb.service.access.***"), new javax.xml.namespace.QName("lirePersonne"));
     
    	//étape 3 : récupération de l'adresse URL du service accédé
    	String endpoint = "http://***/services/CRMPersonne";
    	call.setTargetEndpointAddress(endpoint);
     
    	call.setOperationName(new QName("lirePersonne"));
     
    	call.addParameter("arg_0_1", new QName("ServiceContexte"), ParameterMode.IN);
    	call.addParameter("arg_1_1", new QName("String"), ParameterMode.IN);
    	call.setReturnType(XMLType.SOAP_ARRAY);
    	Personne myperson = (Personne)call.invoke( new Object [] { new QName("123461199") });
     
    } catch (Exception e) {
    	e.printStackTrace();
    }
    Mon erreur de retour est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: javax.xml.rpc.JAXRPCException: Number of parameters passed in (1) doesn't match the number of IN/INOUT parameters (2) from the addParameter() calls
     faultActor: 
     faultNode:
    Donc ok il faut que je mette le deuxième argument dans le Object, mais je ne suis pas sûr de savoir quoi mettre ni du reste de mon code.

    Voici le body de la requête soap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       <soapenv:Body>
          <ejb:lirePersonne>
             <arg_0_1>
                <codeApplication>${#Project#codeApplication}</codeApplication>
                <jetonApplication>${#Project#jetonApplication}</jetonApplication>
                <traitementId>${#Project#timestampTest}</traitementId>
                <utilisateur>${#Project#utilisateur}</utilisateur>
             </arg_0_1>
             <arg_1_1>
                <identifiantPersonne>123461199</identifiantPersonne><infosPersonne xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><infosPersonne><budget xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><charges xsi:nil="true"/></budget><budget xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><signaletique xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><nommage xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><situationFamiliale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><situationProfessionnelle><employeur><adresseTelephonique xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><adresseTelephonique xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><adresseEmail xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><adressePostale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><profilAdresse xsi:nil="true"/></adressePostale></employeur><employeur xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/></situationProfessionnelle><adresse><adressePostale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><profilAdresse xsi:nil="true"/></adressePostale><adressePostale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><adresseEmail xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><adresseTelephonique xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/></adresse><relationPersonne xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><profilPersonne xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><profilClient xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><qualite xsi:nil="true"/></profilClient><salarie xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><recrutementStructure><magasin xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><magasin xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><reseau xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><sousReseau xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><enseigne xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><portefeuille xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><societeJuridique><adresse xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><profilAdresse xsi:nil="true"/></adresse><adresse xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><mentionsLegales xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/></societeJuridique><uniteGestion xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><agence xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><uniteComptable xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/></recrutementStructure><profilProspect xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><encours xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/></infosPersonne><intervenant xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
             </arg_1_1>
          </ejb:lirePersonne>
       </soapenv:Body>
    Quand je disais je ne suis pas sûr de mon code, c'est parce que pour le premier argument arg_0_1, je suis censé passé 4 paramètres, ce que je n'ai pas fait parce que je ne sais pas comment m'y prendre...

    Donc voici mon problème!

    J'ai aussi une autre question.
    Est-il possible de réaliser un appel de service directement en spécifiant tout le contenu du message soap envoyé et de récupérer le contenu du retour ?

    Merci de m'éclairer.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut
    Ce ne serait pas plutôt un truc dans le genre qu'il faudrait faire pour mon cas, ou je n'y suis pas du tout ?
    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
    try {
    	//étape 1 : création d'accès vers le service
    	Service service = new Service();
     
    	//étape 2 :création d'un appel vers le service
    	Call call = (Call)service.createCall();//new javax.xml.namespace.QName("http://ejb.service.access.***"), new javax.xml.namespace.QName("lirePersonne"));
     
    	//étape 3 : récupération de l'adresse URL du service accédé
    	String endpoint = "http://172.21.114.17:52080/CRMAccostage-EJBHttpRouter/services/CRMPersonne";
    	call.setTargetEndpointAddress(endpoint);
     
    	call.setOperationName(new QName("lirePersonne"));
     
    	call.addParameter("codeApplication", new QName("ServiceContexte"), ParameterMode.IN);
    	call.addParameter("jetonApplication", new QName("ServiceContexte"), ParameterMode.IN);
    	call.addParameter("traitementId", new QName("ServiceContexte"), ParameterMode.IN);
    	call.addParameter("utilisateur", new QName("ServiceContexte"), ParameterMode.IN);
     
    	call.addParameter("identifiantPersonne", new QName("Personne"), ParameterMode.IN);
     
    	call.setReturnType(XMLType.SOAP_ARRAY);
    	Personne myperson = (Personne)call.invoke( new Object [] { new QName("${#Project#codeApplication}"),
    	                                                           new QName("${#Project#jetonApplication}"),
    	                                                           new QName("${#Project#timestampTest}"),
    	                                                           new QName("${#Project#utilisateur}"),						
                                                                       new QName("123461199")});
     
    } catch (Exception e) {
    	e.printStackTrace();
    }
    Là il me retourne ça comme erreur quoi que je mette comme type pour QName... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
     faultSubcode: 
     faultString: org.xml.sax.SAXException: Bad types (class javax.xml.namespace.QName -&gt; class ***.echanges.crm.util.ServiceContexte) Message being parsed: 
     faultActor: 
     faultNode: 
     faultDetail:
    ...

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut
    C'est bon, j'ai trouvé une solution pendant mon petit moment de révélation !
    Avec un appel par le message soap entier comme je voulais, mais au final je n'ai pas utilisé axis mais le HttpClient :

    Voici le code si ça intéresse quelqu'un :
    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
    try {
    	RequestEntity entity = new StringRequestEntity(
    	"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ejb=\"http://ejb.service.access.***\">" +
    	  "<soapenv:Header/>" +
    	    "<soapenv:Body>" +
    	    "<ejb:lirePersonne>" +
    	    ...
    	    "</ejb:lirePersonne>" +
              "</soapenv:Body>" +
            "</soapenv:Envelope>");
     
            PostMethod postMethod = new PostMethod("http://***/services/CRMPersonne");
    	postMethod.setRequestEntity(entity);
    	postMethod.setRequestHeader("SOAPAction", "Post");
    	HttpClient httpClient = new HttpClient();
    	int statutCode = httpClient.executeMethod(postMethod);
    	String resultat = null;
     
    	if (statutCode==HttpStatus.SC_OK) {
    	        System.out.println("appel réussi au service");
    	        resultat = postMethod.getResponseBodyAsString();
    	        System.out.println(resultat);
     
    	} else {
    	        System.out.println("Erreur!");
    	}
     
    } catch (Exception e) {
    	e.printStackTrace();
    }
    Il y a juste StringRequestEntity qui est déprécié, je cherche la soultion alternative récente mais sinon ça fonctionne.

    il faut importer les jar commons-httpclient-3.1.jar et commons-codec-1.3.jar.

    Je passe en résolu mais si vous avez des suggestions, ou même des réponses pour axis je suis preneur, ça m'intéresse !

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

Discussions similaires

  1. Appel web service - paramètre toujours null
    Par -Switch- dans le forum Services Web
    Réponses: 9
    Dernier message: 09/07/2010, 12h45
  2. [Axis 2] : pb appel web services avec paramètre à null
    Par Foub dans le forum Services Web
    Réponses: 1
    Dernier message: 06/01/2009, 07h31
  3. Passage de paramètres à un web service
    Par alpha25 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 30/05/2008, 10h40
  4. Problème appel Web Service SharePoint
    Par bugmenot dans le forum Windows
    Réponses: 0
    Dernier message: 14/09/2007, 15h09
  5. [2.0][C#] appel web service
    Par lenoil dans le forum Services Web
    Réponses: 1
    Dernier message: 09/10/2006, 08h24

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