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 :

[AXIS] Obtenir le WSDL d'un service depuis le code ...


Sujet :

Services Web Java

  1. #21
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    je cherche tjs et j'ai pas trouvé de réponses...

    réponse pour Arnaud_03: pas du tout, je cherche plutot l'invocation dynamique de services web, car c'est moi qui crée le WSDL du service, je veux le faire depuis mon application et juste apres création du service web, ce dernier est un service composite, comme ça, l'utilisateur de mon système dès qu'il crée son service composite il peut le tester en l'invoquant dynamiquement!

    Help me please!

  2. #22
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Axis autorise les invocation dynamique avec un code de ce type :
    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
    41
    42
    package client;
     
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.rmi.RemoteException;
     
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;
     
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.description.OperationDesc;
    import org.apache.axis.description.ParameterDesc;
    import org.apache.axis.encoding.XMLType;
     
    public class AxisDynamicClient {
    	public static void main(String args[]) {
    		try {
    			String EPR = "ENDPOINTREFERENCE";
    			String TNS = "TARGETNAMESPACE";
     
    			OperationDesc desc = new OperationDesc();
    			desc.addParameter(new ParameterDesc(new QName("INPARAM"), ParameterDesc.IN, XMLType.XSD_STRING));
    			desc.setReturnType(XMLType.XSD_STRING);
     
    			Call call = (Call)new Service().createCall();
    			call.setOperation(desc);
    			call.setTargetEndpointAddress(new URL(EPR));
    			call.setSOAPActionURI(TNS + "OPERATIONNAME");
    			call.setOperationName(new QName(TNS, "OPERATIONNAME"));
     
    			String inparam = "MyParam";
    			String outparam = (String)call.invoke(new Object[] {inparam});
    		} catch(MalformedURLException e) {
    			e.printStackTrace();
    		} catch(RemoteException e) {
    			e.printStackTrace();
    		} catch(ServiceException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Axis2 propose également des invocations dynamique avec son modèle AXIOM, comme le présente le guide d'Axis2.

    Toutefois, même en invoquant dynamiquement un service web, il faut connaître son emplacement (ENDPOINTREFERENCE), le namespace cible (TARGETNAMESPACE), le nom des opérations à invoquer et les paramètres qu'il faut passer et récupérer pour chacune de ces opérations.

  3. #23
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Bonjour

    merci pour votre réponse, j'ai essayé votre code et ça marche bien mais j'ai pas su invoquer des services ayants des entiers (int) en entrée, quel est le code qui remplace sachant qu'il faut mettre XMLType.XSD_INT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String inparam = "MyParam";
    			String outparam = (String)call.invoke(new Object[] {inparam});
    en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int inparam1 = 2;
    int outparam = (int)call.invoke(new Object[]{inparam1});
    y a des erreurs???

    dans mon cas, pour invoquer mes services créés, j'ai le endpointRef et j'ai le targetnamespace, je connais aussi la méthode à invoquer (car y'en a qu'une seule que je nomme moi même) mais les entrées et les sorties je ne les connais pas, il faudrait d'abbord que je parcours le fichier wsdl, mais le pblm n'est pas là. à part si je crée une méthode genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void addParameter(String namePar,QName typePar){
    desc.addParameter(new ParameterDesc(new QName(namePar), ParameterDesc.IN, typePar));
    }
    et puis, on appelle cette fonction selon le nombre de paramètres en entrée de la méthode. exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    addParameter("a",XMLType.XSD_STRING);
    addParameter("b",XMLType.XSD_INT);[/
    Que pensez vous?
    j'essaye de trouver toutes le ssolutions possibles
    une autre question: si on a plusieurs paramètres en sortie comment faire?

  4. #24
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par mina86 Voir le message
    j'ai pas su invoquer des services ayants des entiers (int) en entrée, quel est le code qui remplace sachant qu'il faut mettre XMLType.XSD_INT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String inparam = "MyParam";
    String outparam = (String)call.invoke(new Object[] {inparam});
    en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int inparam1 = 2;
    int outparam = (int)call.invoke(new Object[]{inparam1});
    y a des erreurs???
    Cela me paraît bien. Au pire, utilise un Integer si cela ne fonctionne pas comme ça, mais je pense que le type primitif int doit passer.

    Citation Envoyé par mina86 Voir le message
    si je crée une méthode genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void addParameter(String namePar,QName typePar){
    desc.addParameter(new ParameterDesc(new QName(namePar), ParameterDesc.IN, typePar));
    }
    et puis, on appelle cette fonction selon le nombre de paramètres en entrée de la méthode. exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    addParameter("a",XMLType.XSD_STRING);
    addParameter("b",XMLType.XSD_INT);
    Que pensez vous?
    Plutôt d'accord.

    Citation Envoyé par mina86 Voir le message
    si on a plusieurs paramètres en sortie comment faire?
    Une méthode ne retourne jamais plusieurs paramètres... Si tu as plusieurs objets à renvoyer, crée une classe qui contient tous ces éléments, puis retourne une instance de cette classe.

  5. #25
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Arnaud_03 je vous remercie pour tout ce que vous faites.

    en mettant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    desc.addParameter(new ParameterDesc(new QName("a"), ParameterDesc.IN, XMLType.XSD_INT));
    desc.setReturnType(XMLType.XSD_INT);
    ...
    int outparam = (int)call.invoke(new Object[]{3});
    y a des erreurs java:
    ultiple markers at this line
    - Type mismatch: cannot convert from int to Object
    - Cannot cast from Object to int

    y a surement un moyen?

  6. #26
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par Arnaud_03 Voir le message
    Au pire, utilise un Integer si cela ne fonctionne pas comme ça

  7. #27
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    re bonjour,

    pour etre franche je n'ai jamais utilisé ce type!
    je mets :
    Integer inParam= ?

  8. #28
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer outparam = (Integer)call.invoke(new Object[]{3});
    Ou en cas d'échec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer outparam = (Integer)call.invoke(new Object[]{new Integer(3)});
    Tu peux trouver une description de la classe Integer ici.

  9. #29
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup,

    le deuxième code marche tres bien, le premier non!
    je vous remercie!

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    Bonjour,
    J'ai un projet sur les web services, et mon problème est le suivant: On remplit un formulaire sur le site et en fonction des données saisies dans le formulaire, un appel est fait au webservice qui déclenche le script adéquat sur le serveur. Les données saisies dans le formulaire sont envoyées sous forme de fichier xml au WS qui devra l'interpréter et déclencher le script. Une fois l'opération terminée, le résultat est de nouveau retourné sous forme xml et afficher sur la page utilisateur.
    De plus, je n'est qu'un seul WS c'est à dire qu'une seule entrée; ce qui fait que je dois gérer les accès au WS.
    Si quelqu'un sait comment procéder merci d'avance.

Discussions similaires

  1. Web service depuis un fichier wsdl
    Par pere_noel00 dans le forum Services Web
    Réponses: 1
    Dernier message: 10/07/2009, 15h27
  2. Problème d'utilisation d'Axis avec des WSDL
    Par Tino13 dans le forum Services Web
    Réponses: 2
    Dernier message: 31/03/2007, 10h09
  3. Réponses: 2
    Dernier message: 24/03/2007, 12h11
  4. [WebService][WSDL] Generation de WSD depuis du C (ou autre)
    Par chronos dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/01/2007, 17h02
  5. Réponses: 5
    Dernier message: 19/05/2006, 15h22

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