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 :

Erreur : More than one part (Document/literal)


Sujet :

Services Web Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut Erreur : More than one part (Document/literal)
    Bonjour,

    J'ai un petit souci qui me laisse perplexe.

    J'ai créer un WebService en mode SOAP avec Document/Literal.

    Un seul part en entrée avec element qui represente un complex type et un seul part en sortie avec element2 qui represente un complex type.

    Ca marchait tres bien.

    Maintenant on me demande de mettre plusieurs parts en entré plutot que mon element complex type.

    Or cela me donne l'erreur suivante : "More than one part".


    J'ai fait pas mal de recherche, et j'ai l'impression que cette erreur est normale, et que c'est plutot la demande de mettre plusieurs parts qui n'est pas logique.
    Mais bon, je debute dans les WebServices, et je ne peux etre sur de rien.


    Ce qui est bizarre egalement (je developpe sous Rational), quand je met plusieurs part en output, rational me met l'erreur, mais que je met plusieur part en input, là il me signale aucune erreur, l'erreur intervient quand je lance l'outils WSDL2Java.



    Pouvez vous m'aider sur ce sujet ?

    Est il reelement possible de mettre plusieurs part en input dans un WSDL de protocol SOAP Document literal ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour,
    Ce que tu peux faire, c'est de créer un autre type xsd qui va envelopper les différents types compexes que tu souhaites envoyer, et c'est ce type enveloppe qui servira de input part. Quelque chose du genre :
    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
     
    ...
    <xs:element name="MyServiceRequest">
       <xs:complexType>
          <xs:sequence>
            <xs:element name="Element1" type="TypeComplexe1" />
            <xs:element name="Element2" type="TypeComplexe2" />
          </xs:sequence>
       </xs:complexType>
    </xs:element>
    ...
    <xs:complexType name="TypeComplexe1">
    ...
    </xs:complexType>
     
    <xs:complexType name="TypeComplexe2">
    ...
    </xs:complexType>
    Et c'est donc "MyServiceRequest" que tu vas utiliser comme input part, ce qui te permettra de transporter plusieurs éléments en document/literal. Tu pourrais faire de même pour les types de retour (output part).
    Bon courage.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Merci manblaizo,

    Cela je l'avais compris, et c'est ce que je faisais.

    Ma question (peut etre mal posée), c'etait :

    - Est il possible de mettre plusieurs balise "wsdl:part" dans un "wsdl:message" en Input dans un document de type SOAP avec litteral/document?

    Apparement on dirait que non, et c'est cela dont je voudrais etre sur.

    Car sinon, oui, en mettant une seule balise part, et en faisant pointer cette balise sur un element complex type, là on peut faire tout ce qu'on veut derriere.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par ahulane
    Ma question (peut etre mal posée), c'etait :

    - Est il possible de mettre plusieurs balise "wsdl:part" dans un "wsdl:message" en Input dans un document de type SOAP avec litteral/document?
    En fait, la réponse est oui, tu peux mettre plusieurs wsdl:part dans un wsdl:message en input pour un document/literal. Sauf que, si tu as par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <wsdl:message name="myRequest">
         <wsdl:part name="param1" element="Element1">
         <wsdl:part name="param2" element="Element2">
    </wsdl:message>
     
    <wsdl:portType name="ServicePortType">
        <wsdl:operation name="op1">
             <wsdl:input message="myRequest"/>
             <wsdl:output ...>
        </wsdl:operation>
    <wsdl:portType>
    En document/literal, le message SOAP envoyé ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <soap:envelope>
        <soap:body>
            <Element1>...</Element1>
            <Element2>...</Element2>
        </soap:body>
    </soap:envelope>
    Or pour la compatibilité WS-I, l'élément <soap:body> d'un message soap ne doit avoir qu'un seul élément fils, alors que là on en a deux. Ce problème se règle en utilisant "document/literal wrapped", c'est-à-dire pratiquement ce qu'on a dit avant en enveloppant les paramètres de la méthode dans un nouveau complexType qui constituera donc l'unique élément fils de <soap:body> dans le message soap envoyé au serveur.
    Voilà, je crois que si tu obtiens l'erreur "More than one part", c'est certainement que le framework que tu utilises n'encourage pas la création de web services non compatibles WS-I afin faciliter l'interopérabilité...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Ok, bien compris pour ca.

    Donc si je resume pour que tout soit bien clair :

    En utilisant, document / literal Wrapped, cela ressemblerais a ca :

    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
        <schema>
            <element name="myMethod">
                <complexType>
                    <sequence>
                        <element name="x" type="xsd:int"/>
                        <element name="y" type="xsd:float"/>
                    </sequence>
                </complexType>
            </element>
            <element name="myMethodResponse">
                <complexType/>
            </element>
        </schema>
    </types>
    <message name="myMethodRequest">
        <part name="parameters" element="myMethod"/>
    </message>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <soap:envelope>
        <soap:body>
            <myMethod>
                <x>5</x>
                <y>5.0</y>
            </myMethod>
        </soap:body>
    </soap:envelope>

    Ce qui revient donc a n'avoir qu'une seule balise part. Et cela est mieux du point de vue Compatibilité WS-I.

    Il s'agit donc de ce que je faisais depuis le debut.


    Ce qui fait qu'en fait, il s'agit de la meilleure facon de faire. La demande exterieure qui m'a ete faite de faire plusieurs balises part au lieu d'une seule, donc de passer de document literal Wrapped a document literal est dommage et pas terrible.


    Merci en tout cas.

Discussions similaires

  1. Erreur ORA-01427 single-row subquery returns more than one row
    Par SmileAndFly dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/08/2008, 16h12
  2. Problème: "Query returns more than one row"
    Par ctobini dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/09/2007, 12h48
  3. Réponses: 4
    Dernier message: 25/01/2007, 16h02
  4. Réponses: 3
    Dernier message: 08/12/2006, 18h28
  5. ORA-01427: single-row subquery returns more than one row
    Par hadid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2006, 16h35

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