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][Java2WSDL] Génération du complexType représentant MonObjet[]


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Par défaut [Axis][Java2WSDL] Génération du complexType représentant MonObjet[]
    Bonjour à tous,

    j'utilise axis1.4 et sa tâche ant Java2WSDL afin de générer le WSDL représentant mes objets et services.
    Mon problème se situe au niveau de la création du complexType dans le WSDL :
    • Si l'attribut est un objet perso, ça marche
    • Si l'attribut est une liste d'objets persos, ça ne marche pas


    Plus concrètement, voici la définition de mon objet Java à partir duquel je veux que la tâche java2WSDL crée le WSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package fr.test.src.objet;
     
    public class MonObjet implements java.io.Serializable {
        private ObjetToto objetToto;
        private List<ObjetTiti> objetsTiti;
     
        public MonObjet(){}
     
        /*Les getters et setters*/
        ...
    }
    J'exécute la tâche ant et le WSDL est créée (j'ai enlevé la définition de l'exception et du service, ce n'est pas le soucis ici). Le résultat est le suivant :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://service.ws.test.fr" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.ws.test.fr" xmlns:intf="http://service.ws.test.fr" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://objet.ws.test.fr" xmlns:tns3="http://exception.ws.test.fr" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <wsdl:types>
      <schema targetNamespace="http://service.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://xml.apache.org/xml-soap"/>
       <import namespace="http://objet.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="ArrayOf_xsd_anyType">
        <complexContent>
         <restriction base="soapenc:Array">
          <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
         </restriction>
        </complexContent>
       </complexType>
      </schema>
      <schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://service.ws.test.fr"/>
       <import namespace="http://objet.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="Vector">
        <sequence>
         <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType"/>
        </sequence>
       </complexType>
      </schema>
      <schema targetNamespace="http://objet.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://xml.apache.org/xml-soap"/>
       <import namespace="http://service.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="MonObjet">
        <sequence>
         <element name="objetsTiti" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
         <element name="objetToto" nillable="true" type="tns1:ObjetToto"/>
        </sequence>
       </complexType>
       <complexType name="ObjetToto">
        <sequence>
          <element name="attribut" nillable="true" type="xsd:string"/>
        </sequence>
       </complexType>
    Ma question est donc la suivante : pourquoi je me retrouve avec un tableau d'objets typé "ArrayOf_xsd_anyType" ? Plus précisément :pourquoi java2WSDL ne crée pas un complexType "ArrayOf_tnsx_objetTiti" qui serait d'arrayType :tnsx:ObjetTiti[] ?

    La définition de la tâche ant est la suivante :
    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
    <target name="Java2Wsdl" depends="init" description="generate .wsdl from files">
        <echo message="Le projet doit avoir les fichiers compilés dans ${bin.dir} pour générer le WSDL"/>
        <taskdef name="java2wsdl" classname="org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask" onerror="report" loaderref="axis">
             <classpath refid="compile.classpath" />
        </taskdef>
     
        <java2wsdl classname="${source.package}.${service.name}.${webservice.name}" use="encoded" style="rpc" namespace="http://${service.name}.${target.namespace}" location="http://localhost:9080/TestWS/services/${webservice.name}" output="${webservice.name}.wsdl">
            <mapping namespace="http://${objet.name}.${target.namespace}" package="${source.package}.${objet.name}"/>
            <mapping namespace="http://${exception.name}.${target.namespace}" package="${source.package}.${exception.name}"/>
    	<mapping namespace="http://${service.name}.${target.namespace}" package="${source.package}.${service.name}"/>
    	<classpath>
        	    <pathelement location="${bin.dir}" />
    	</classpath>
        </java2wsdl>
    </target>
    Ai-je oublié quelque chose dans la tâche ant ?
    Faut-il ajouter l'implémentation de certaines méthodes sur les List dans la classe java de définition de l'entité ?
    Le problème est ailleurs ?

    Merci d'avance pour vos réponses éclairées

    Note : je peux effectivement modifier le WSDL à la main pour obtenir ce que je souhaite mais j'aimerais obtenir le même résultat en utilisant uniquement axis

  2. #2
    qxn
    qxn est déconnecté
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Par défaut
    Citation Envoyé par zaewonyx Voir le message
    Bonjour à tous,

    j'utilise axis1.4 et sa tâche ant Java2WSDL afin de générer le WSDL représentant mes objets et services.
    Mon problème se situe au niveau de la création du complexType dans le WSDL :
    • Si l'attribut est un objet perso, ça marche
    • Si l'attribut est une liste d'objets persos, ça ne marche pas


    Plus concrètement, voici la définition de mon objet Java à partir duquel je veux que la tâche java2WSDL crée le WSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package fr.test.src.objet;
     
    public class MonObjet implements java.io.Serializable {
        private ObjetToto objetToto;
        private List<ObjetTiti> objetsTiti;
     
        public MonObjet(){}
     
        /*Les getters et setters*/
        ...
    }
    J'exécute la tâche ant et le WSDL est créée (j'ai enlevé la définition de l'exception et du service, ce n'est pas le soucis ici). Le résultat est le suivant :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://service.ws.test.fr" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.ws.test.fr" xmlns:intf="http://service.ws.test.fr" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://objet.ws.test.fr" xmlns:tns3="http://exception.ws.test.fr" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <wsdl:types>
      <schema targetNamespace="http://service.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://xml.apache.org/xml-soap"/>
       <import namespace="http://objet.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="ArrayOf_xsd_anyType">
        <complexContent>
         <restriction base="soapenc:Array">
          <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
         </restriction>
        </complexContent>
       </complexType>
      </schema>
      <schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://service.ws.test.fr"/>
       <import namespace="http://objet.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="Vector">
        <sequence>
         <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType"/>
        </sequence>
       </complexType>
      </schema>
      <schema targetNamespace="http://objet.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://exception.ws.test.fr"/>
       <import namespace="http://xml.apache.org/xml-soap"/>
       <import namespace="http://service.ws.test.fr"/>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="MonObjet">
        <sequence>
         <element name="objetsTiti" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
         <element name="objetToto" nillable="true" type="tns1:ObjetToto"/>
        </sequence>
       </complexType>
       <complexType name="ObjetToto">
        <sequence>
          <element name="attribut" nillable="true" type="xsd:string"/>
        </sequence>
       </complexType>
    Ma question est donc la suivante : pourquoi je me retrouve avec un tableau d'objets typé "ArrayOf_xsd_anyType" ? Plus précisément :pourquoi java2WSDL ne crée pas un complexType "ArrayOf_tnsx_objetTiti" qui serait d'arrayType :tnsx:ObjetTiti[] ?

    La définition de la tâche ant est la suivante :
    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
    <target name="Java2Wsdl" depends="init" description="generate .wsdl from files">
        <echo message="Le projet doit avoir les fichiers compilés dans ${bin.dir} pour générer le WSDL"/>
        <taskdef name="java2wsdl" classname="org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask" onerror="report" loaderref="axis">
             <classpath refid="compile.classpath" />
        </taskdef>
     
        <java2wsdl classname="${source.package}.${service.name}.${webservice.name}" use="encoded" style="rpc" namespace="http://${service.name}.${target.namespace}" location="http://localhost:9080/TestWS/services/${webservice.name}" output="${webservice.name}.wsdl">
            <mapping namespace="http://${objet.name}.${target.namespace}" package="${source.package}.${objet.name}"/>
            <mapping namespace="http://${exception.name}.${target.namespace}" package="${source.package}.${exception.name}"/>
    	<mapping namespace="http://${service.name}.${target.namespace}" package="${source.package}.${service.name}"/>
    	<classpath>
        	    <pathelement location="${bin.dir}" />
    	</classpath>
        </java2wsdl>
    </target>
    Ai-je oublié quelque chose dans la tâche ant ?
    Faut-il ajouter l'implémentation de certaines méthodes sur les List dans la classe java de définition de l'entité ?
    Le problème est ailleurs ?

    Merci d'avance pour vos réponses éclairées

    Note : je peux effectivement modifier le WSDL à la main pour obtenir ce que je souhaite mais j'aimerais obtenir le même résultat en utilisant uniquement axis
    Je ne sais pas si ca repondra a ta question mais pourquoi tu utilises java2wsdl alors que Axis code generator marche tres bien ?

    Essaie ca, je n'ai pas eu de probleme lors de la generation du wsdl http://ws.apache.org/axis2/tools/1_0...va-plugin.html

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Par défaut
    Merci bien pour ta réponse et pour le lien.

    Le choix de cette solution (ant java2WSDL), ne me revient pas (choix client) et c'est pour ça que je l'utilise.
    Cependant, ma question est générale : j'aimerais vraiment savoir, dans ce cas concret et également pour ma culture personnelle, ce qu'il manque pour que le WSDL généré par ant soit correct, étant donné qu'axis le permet.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Par défaut
    Bon, ben c'est résolu...

    Tout simplement, axis ne "comprend" pas quand on lui passe une List...
    Pour avoir la bonne génération, il faut définir les attributs en tant que tableau "MonObjet monObjet[]" en non en List, Set ou autre.

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

Discussions similaires

  1. [Axis / Tomcat] Génération du WSDL
    Par taherlabidi dans le forum Services Web
    Réponses: 2
    Dernier message: 12/09/2012, 14h24
  2. Génération du fichier WSDD Axis
    Par tatemilio2 dans le forum Services Web
    Réponses: 6
    Dernier message: 15/07/2009, 16h04
  3. AXIS : JAVA2WSDL
    Par pierreonxbox dans le forum Services Web
    Réponses: 2
    Dernier message: 02/06/2008, 01h23
  4. Réponses: 2
    Dernier message: 24/03/2007, 12h11
  5. [Eclipse 3.1] [Axis] Génération à partir de wsdl
    Par cosmos38240 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/10/2005, 15h48

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