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 :

[Axis2] Problème pour renvoyer un tableau en sortie


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut [Axis2] Problème pour renvoyer un tableau en sortie
    Bonjour,
    La prise en main d'axis2 s'est passé sans problème mais la je bloque un peu (et depuis quelques temps...).
    Voila mon problème :
    Je souhaite sortir des données du type :
    <declaration>
    <id>1</id>
    <nb_item>2</nb_item>
    <item>
    <id>234</id>
    </item>
    <item>
    <id>678</id>
    </item>
    </declaration>

    J'ai donc généré mon fichier wsdl sous éclipse en précisant pour item :
    maxOccurs="unbounded" minOccurs="0"

    je génère ensuite à l'aide de l'outil wsdl2java mon code serveur et je modifie le fichier skeleton. (je précise que sa fonctionne si je ne précise pas de multiplicité pour item)

    le problème est que le résultat en sortie est une erreur :
    <faultstring>unknown</faultstring>

    Ma question est : comment fait t'on pour gérer la multiplicité sous axis2?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    Bonjour,
    Je continu mes recherches et je me pose une nouvelle question :

    J'utilise ADB pour le data-binding lors de la génération du code serveur java à partir du wsdl (wsdl2java option adb).

    Ne devrais-je pas utiliser JAXB qui gère mieux les types complexes ou les données multiple?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    Bonjour,
    Je viens de régler mon problème.
    J'ai utilisé WMLbeans pour le data binding lors de la génération du serveur à l'aide de l'outil wsdl2java.
    J'arrive donc maintenant à générer des variables multiples.

    Je vous colle mon WSDL et mon code du skeleton pour que ça puisse peut être servir à d'autres :

    ******** remplace un mot. Il fait référence au nom de votre projet.

    WSDL :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:8080/*******/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="******" targetNamespace="http://localhost:8080/******/">
      <wsdl:types>
        <xsd:schema targetNamespace="http://localhost:8080/******/">
          <xsd:element name="getdeclaration">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="Pays" type="tns:pays"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="getdeclarationResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="DeclarationXML" type="tns:declarationXML"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
     
          <xsd:simpleType name="pays">
          	<xsd:restriction base="xsd:string"></xsd:restriction>
          </xsd:simpleType>
     
          <xsd:complexType name="declarationXML">
          	<xsd:sequence>
          		<xsd:element name="id" type="xsd:int"></xsd:element>
          		<xsd:element name="pays_decla" type="tns:pays"></xsd:element>
          		<xsd:element name="declarations" type="tns:declaration" maxOccurs="unbounded" minOccurs="0"></xsd:element>
          		<xsd:element name="nbre_decla" type="xsd:int"></xsd:element>
          	</xsd:sequence>
          </xsd:complexType>
     
          <xsd:complexType name="declaration">
          	<xsd:sequence>
          		<xsd:element name="id" type="xsd:int"></xsd:element>
          		<xsd:element name="libelle" type="xsd:string"></xsd:element>
          		<xsd:element name="nbre_item" type="xsd:int"></xsd:element>
          		<xsd:element name="items" type="tns:item" maxOccurs="unbounded" minOccurs="0"></xsd:element>
          	</xsd:sequence>
          </xsd:complexType>
     
          <xsd:complexType name="item">
          	<xsd:sequence>
          		<xsd:element name="id" type="xsd:int"></xsd:element>
          		<xsd:element name="libelle" type="xsd:string"></xsd:element>
          	</xsd:sequence>
          </xsd:complexType>
        </xsd:schema>
      </wsdl:types>
      <wsdl:message name="getdeclarationRequest">
        <wsdl:part element="tns:getdeclaration" name="parameters"/>
      </wsdl:message>
      <wsdl:message name="getdeclarationResponse">
        <wsdl:part element="tns:getdeclarationResponse" name="parameters"/>
      </wsdl:message>
      <wsdl:portType name="*******">
        <wsdl:operation name="getdeclaration">
          <wsdl:input message="tns:getdeclarationRequest"/>
          <wsdl:output message="tns:getdeclarationResponse"/>
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="*******SOAP" type="tns:*******">
      	<soap:binding style="document"
      		transport="http://schemas.xmlsoap.org/soap/http" />
      	<wsdl:operation name="getdeclaration">
      		<soap:operation
      			soapAction="http://localhost:8080/******/NewOperation" />
      		<wsdl:input>
      			<soap:body use="literal" />
      		</wsdl:input>
      		<wsdl:output>
      			<soap:body use="literal" />
      		</wsdl:output>
      	</wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="******">
        <wsdl:port binding="tns:******SOAP" name="******SOAP">
          <soap:address location="http://localhost:8080/"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    ******Skeleton.java

    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
     
    public localhost.******.GetdeclarationResponseDocument getdeclaration
                      (
                      localhost.******.GetdeclarationDocument getdeclaration0
                      )
                {
                    	 GetdeclarationResponseDocument resDoc = GetdeclarationResponseDocument.Factory.newInstance();
                    	 GetdeclarationResponseDocument.GetdeclarationResponse res = resDoc.addNewGetdeclarationResponse();
     
                    	 DeclarationXML declaXML = res.addNewDeclarationXML();
                    	 declaXML.setId(1);
                    	 declaXML.setNbreDecla(2);
                    	 declaXML.setPaysDecla("Rwanda");
     
     
                    	 Declaration decla1 = declaXML.addNewDeclarations();
                    	 decla1.setId(11);
                    	 decla1.setLibelle("test decla 11");
                    	 decla1.setNbreItem(2);
     
     
                    	 Item item1 = decla1.addNewItems();
                    	 item1.setId(21);
                    	 item1.setLibelle("test item 21");
     
                    	 Item item2 = decla1.addNewItems();
                    	 item2.setId(22);
                    	 item2.setLibelle("test item 22");
     
     
                    	 Declaration decla2 = declaXML.addNewDeclarations();
                    	 decla2.setId(12);
                    	 decla2.setLibelle("test decla 12");
                    	 decla2.setNbreItem(1);
     
     
                    	 Item item3 = decla2.addNewItems();
                    	 item3.setId(31);
                    	 item3.setLibelle("test item 31");
     
                    	 resDoc.setGetdeclarationResponse(res);
     
                    	 return resDoc;
            }

    Voici le résultat :

    <rad:getdeclarationResponse>

    <DeclarationXML>
    <id>1</id>
    <pays_decla>France</pays_decla>

    <declarations>
    <id>11</id>
    <libelle>test decla 11</libelle>
    <nbre_item>2</nbre_item>

    <items>
    <id>21</id>
    <libelle>test item 21</libelle>
    </items>

    <items>
    <id>22</id>
    <libelle>test item 22</libelle>
    </items>
    </declarations>

    <declarations>
    <id>12</id>
    <libelle>test decla 12</libelle>
    <nbre_item>1</nbre_item>

    <items>
    <id>31</id>
    <libelle>test item 31</libelle>
    </items>
    </declarations>
    <nbre_decla>2</nbre_decla>
    </DeclarationXML>
    </rad:getdeclarationResponse>

    Un autre problème m'ennui. Je n'arrive pas à déclarer les déclarations et les Items comme des tableaux.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Declaration[] decla = null;
    Decla[1] = declaXML.addNewDeclarations();
    decla[0].setId(11);
    decla[0].setLibelle("test decla 11");
    decla[0].setNbreItem(2);
    je ne me suis pas encore plongé sur le problème mais si quelqu'un à une idée...
    Je poste la solution quand dès que je trouves quelques choses.

Discussions similaires

  1. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  2. [MySQL] Problème pour trier un tableau
    Par jojo57 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/04/2007, 13h12
  3. problème pour trier un tableau de hashage
    Par Jasmine80 dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2007, 13h02
  4. [Tableaux] Problème pour contrôler un tableau
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2006, 11h45
  5. Réponses: 2
    Dernier message: 20/03/2006, 20h56

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