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 :

Service Web avec Axis et types complexes.


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut Service Web avec Axis et types complexes.
    Bonjour à tous,

    J'utilises Apache Axis pour réaliser des services web. A l'intérieur d'une classe (du service web), ma méthode retourne un type complexe.

    Je déploie sans problème mon service web sur le serveur, et je génère les fichiers java pour le client avec WSDL2Java. A partir de là, je crée un autre fichier client (qui utilise les fichiers générés) pour invoquer mon service web et récuperer un paramètre. Cela fonctionne très bien lorsque le service web retourne un type simple.
    Des que le type est complexe, cela ne marche pas.

    En faisant une recherche via google, j'ai vu qu'il fallait serialiser mon objet retourné par le service web. Mais je vois pas très bien à quel endroit il faut le faire (sur mon client, lors de l'invocation du service web, ou directement dans le service web (dans le constructeur?)) ?

    Voila, si quelqu'un peut m'aider, ca serait génial.

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    je verrais bien ce sujet sur le forum J2EE, mais bon. Je suis pas expert, mais déjà :
    Citation Envoyé par Skyman37
    Des que le type est complexe, cela ne marche pas.
    C'est-à-dire ? Le client ne compile pas ? Ne se déploie pas ? Ne se charge pas ? N'envoie pas la requête ? Ne reçoit pas la réponse ? Ne comprend pas la réponse ?

    Ben là je crois que j'ai dit tout ce que je savais. A toi de jouer.

    Mon expérience des services web se résume à l'utilisation de wisards Eclipse, mais il me semble que sérialiser tes objets à la main est inutile. Ca doit déjà être fait (surtout que tu as parlé de classes générées automatiquement, il doit y avoir des stubs ou des proxys la dedans, c'est des classes qui s'occupent de la communication).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut
    Citation Envoyé par xavlours
    Bonjour,
    je verrais bien ce sujet sur le forum J2EE, mais bon. Je suis pas expert, mais déjà :

    C'est-à-dire ? Le client ne compile pas ? Ne se déploie pas ? Ne se charge pas ? N'envoie pas la requête ? Ne reçoit pas la réponse ? Ne comprend pas la réponse ?

    Ben là je crois que j'ai dit tout ce que je savais. A toi de jouer.

    Mon expérience des services web se résume à l'utilisation de wisards Eclipse, mais il me semble que sérialiser tes objets à la main est inutile. Ca doit déjà être fait (surtout que tu as parlé de classes générées automatiquement, il doit y avoir des stubs ou des proxys la dedans, c'est des classes qui s'occupent de la communication).

    Merci de ta réponse. Alors cela se compile bien (du côté client et serveur). Ca envoie la requête. J'ai vérifié, apparemment les objets sont bien sérialisés par les classes générés (j'avais oublié certaines classes générées).

    Lorsque j'appelle une méthode du service web qui renvoie une chaine de caractères, cela marche comme il faut (je reçois bien une réponse).
    Par contre, lorsque la méthode du serviec web renvoie une structure de données (type complexe), je ne reçois aucune réponse, et j'ai ce message d'erreur :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Exception in thread "main" AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: org.xml.sax.SAXParseException: Premature end of file.
     faultActor: 
     faultNode: 
     faultDetail: 
    	{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: Premature end of file.
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
    	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:230)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
    	at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
    	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    	at org.apache.axis.client.Call.invoke(Call.java:2767)
    	at org.apache.axis.client.Call.invoke(Call.java:2443)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at localhost.axis.services.PWFServicesVehiculeImplementation.PWFServicesVehiculeImplementationSoapBindingStub.rechercherVehicules(PWFServicesVehiculeImplementationSoapBindingStub.java:640)
    	at src.PWFServicesVehiculeImplementationClient.main(PWFServicesVehiculeImplementationClient.java:17)
     
    	{http://xml.apache.org/axis/}hostname:ADCNA011
     
    org.xml.sax.SAXParseException: Premature end of file.
    	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
    	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    	at org.apache.axis.client.Call.invoke(Call.java:2767)
    	at org.apache.axis.client.Call.invoke(Call.java:2443)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at localhost.axis.services.PWFServicesVehiculeImplementation.PWFServicesVehiculeImplementationSoapBindingStub.rechercherVehicules(PWFServicesVehiculeImplementationSoapBindingStub.java:640)
    	at src.PWFServicesVehiculeImplementationClient.main(PWFServicesVehiculeImplementationClient.java:17)
    Caused by: org.xml.sax.SAXParseException: Premature end of file.
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
    	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:230)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
    	at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
    	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    	... 10 more

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Mmm je suis pas sûr d'avoir bien compris si cette erreur a lieu côté serveur ou client ?

    Sinon, si tu m'envoies le .wsdl, je peux te générer des classes de proxy (Eclipse WTP). Il me semble que ça marchait chez moi, et à vue de nez, j'utilise les mêmes librairies.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    ton wsdl tu l'as généré automatiquement ?

    Y'a moyen de voir la classe du type complexe que tu renvoies ?

    Avec le wsdl et ta classe du type complexe, on devrait mieux comprendre

  6. #6
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    De mémoire : il n'y a que les primitifs et classes équivalentes de "java.lang" (plus aussi BigInteger & BigDecimal), et les tableaux de ces types qui soient supportés... sans oublier QNAME.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut
    Citation Envoyé par xavlours
    Mmm je suis pas sûr d'avoir bien compris si cette erreur a lieu côté serveur ou client ?

    Sinon, si tu m'envoies le .wsdl, je peux te générer des classes de proxy (Eclipse WTP). Il me semble que ça marchait chez moi, et à vue de nez, j'utilise les mêmes librairies.
    Et bien en utilisant le débugueur, j'ai du mal à voir si cela vient du client ou du serveur en fait. Car c'est à la réception de la réponse par le client que j'ai cette erreur (dont soit le serveur a mal écrit la réponse, soit le client n'arrive pas à la recevoir).

    La génération de classes de proxy permettent de faire quoi en plus en fait ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    Si tu as une erreur à la réponse ca vient surement de ton wsdl et de ta classe de ton type complexe.
    Est-ce que quand tu génères ton client la classe de ton type complexe est générée?

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par Skyman37
    La génération de classes de proxy permettent de faire quoi en plus en fait ?
    Ben en gros c'est un assistant qui lit le wsdl et fournit plusieurs classes :
    - des proxys qui s'occupent de la communication : pour chaque opération le proxy offre une méthode du même nom. Il s'occupe de localiser le serveur, créer le message, envoyer, recevoir la réponse récupérer les données et retourner. Donc pour invoquer un service, toi tu te contentes d'appeler une méthode.
    - des classes qui décrivent les infos contenues dans les messages soap (utilisées par le proxy pour créer et récupérer les messages).

    Normalement, tu n'as pas besoin de rentrer là dedans. Tu génères les classes (avec un assistant "créer un client") et tu regardes les interfaces des classes générées. Il doit y en avoir une dont les méthodes correspondent exactement aux opérations du web-service.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. [2012] Tache service web avec paramètre de type Byte
    Par rndhnqz dans le forum SSIS
    Réponses: 1
    Dernier message: 21/04/2014, 19h40
  2. Consommation Service Web avec Axis
    Par Wilkinson dans le forum Services Web
    Réponses: 2
    Dernier message: 30/07/2013, 14h07
  3. creer un web service client avec axis
    Par m3allem001 dans le forum Services Web
    Réponses: 1
    Dernier message: 06/06/2009, 22h46
  4. deployer un service web avec axis 1.4 et websphere
    Par leo13 dans le forum Websphere
    Réponses: 1
    Dernier message: 10/05/2007, 10h45

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