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

Bibliothèques et frameworks PHP Discussion :

[Web Service] Requête XML et type complexe


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par défaut [Web Service] Requête XML et type complexe
    Bonjour,

    Dans une requête SOAP, je cherche comment envoyer un type complexe en paramètre.

    Voici mon fichier WSDL avec mon type complexe "information".
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <definitions name="test" targetNamespace="urn:WS/wsdl"
        xmlns="http://schemas.xmlsoap.org/wsdl/"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:WS/wsdl" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
        <types>
            <xsd:schema targetNamespace="urn:WS/wsdl" xmlns:tns="urn:WS/wsdl">
                <xsd:complexType name="information">
                    <xsd:sequence>
                        <xsd:element name="version" type="xsd:string"></xsd:element>
                        <xsd:element name="id" type="xsd:int"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:schema>
        </types>
        <message name="getDateRequest"/>
        <message name="getDateResponse">
            <part name="date" type="xsd:date"/>
        </message>
        <message name="getXmlRequest">
            <part name="information" type="tns:information"/>
        </message>
        <message name="getXmlResponse">
            <part name="version" type="xsd:string"/>
        </message>
        <portType name="Date">
            <operation name="getDate">
                <input name="input1" message="tns:getDateRequest"/>
                <output name="output1" message="tns:getDateResponse"/>
            </operation>
            <operation name="getXml">
                <input name="input2" message="tns:getXmlRequest"/>
                <output name="output2" message="tns:getXmlResponse"/>
            </operation>
        </portType>
        <binding name="testBinding" type="tns:Date">
            <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="getDate">
                <soap12:operation/>
                <input name="input1">
                    <soap12:body use="literal" namespace="urn:WS/wsdl"/>
                </input>
                <output name="output1">
                    <soap12:body use="literal" namespace="urn:WS/wsdl"/>
                </output>
            </operation>
            <operation name="getXml">
                <input name="input2"/>
                <output name="output2"/>
            </operation>
        </binding>
        <service name="testService">
            <port name="testPort" binding="tns:testBinding">
                <soap12:address location="http://127.0.0.1:1004/webservice/server.php"/>
            </port>
        </service>
        <plnk:partnerLinkType name="test">
            <!-- A partner link type is automatically generated when a new port type is added. Partner link types are used by BPEL processes.
    In a BPEL process, a partner link represents the interaction between the BPEL process and a partner service. Each partner link is associated with a partner link type.
    A partner link type characterizes the conversational relationship between two services. The partner link type can have one or two roles.-->
            <plnk:role name="DateRole" portType="tns:Date"/>
        </plnk:partnerLinkType>
    </definitions>
    Mon type complexe "information " est constitué d'un élément "version" et "id".

    Après quelques essaies, je ne parviens pas du côté client à envoyer ces paramètres dans un appel de méthode "getXml".
    Voici ce que j'ai essayé de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $client = new SoapClient('http://127.0.0.1:1004/webservice/test.wsdl', array('trace' => 1, 'soap_version'  => SOAP_1_2));
    $xml = '<?xml version="1.0" encoding="UTF-8"?>';
        $xml .= '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">';
        $xml .= '<SOAP-ENV:Body>';
        $xml .= '<SOAP-ENV:getXml>';
            $xml .= '<information>';
                $xml .= '<version>test version</version>';
                $xml .= '<id>55555</id>';
            $xml .= '</information>';
        $xml .= '</SOAP-ENV:getXml>';
        $xml .= '</SOAP-ENV:Body>';
        $xml .= '</SOAP-ENV:Envelope>';
    echo $client->getXml($xml);
    Comment travailler avec un type complexe ?
    Comment le fournir en paramètre côté client et comment le récupérer côté serveur ?

    Je suis preneur de tous conseils.

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2008
    Messages : 71
    Par défaut
    As-tu essayé en passant un tableau en argument ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $infos = array('id' => 'tonId', 'version' => 'taversion');
     
    $client = new SoapClient($wsdl, $params);
    $response = client->getXml($infos);
    ?>

    Essaie également de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($client->getXml($xml);
    Il se peut en effet que la réponse envoyée par le soapCLient n'implémente pas de méthode __ToString().

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par défaut
    Cela fonctionne sans problème en tableau.

    Mon problème est fait de savoir comment exécuter directement la requête par flux XML.

    Déjà je viens de m'apercevoir qu'il faut absolument passer par SoapClient::__doRequest qui exécute une requête SOAP.

    http://fr.php.net/manual/fr/soapclient.dorequest.php

    Voici ce que j'ai essayé de faire (je suis sûr de la requête qui a été auto-générée par un passage de paramètre avec un tableau).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        $req = '<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:WS/wsdl" xmlns:ns2="http://127.0.0.1:1004/webservice/newXmlSchema"><env:Body><ns1:testXml><flux><ns2:id ref="reférence n°2" key="key n°2">2222</ns2:id><ns2:version>v 2.0</ns2:version></flux></ns1:testXml></env:Body></env:Envelope>';
     
        echo $client->__doRequest($req,
                                    'http://127.0.0.1:1004/webservice/server.php',
                                    'soapXml',
                                    SOAP_1_2);
    Je n'obtiens toujours pas plus de succès et je n'arrive pas trop à cerner à quoi correspondent les paramètres :
    - string $location,
    - string $action.

    Qui a une idée ?

    Merci

    Fichier 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
    <?xml version="1.0" encoding="UTF-8"?>
    <definitions name="test" targetNamespace="urn:WS/wsdl"
        xmlns="http://schemas.xmlsoap.org/wsdl/"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://127.0.0.1:1004/webservice/newXmlSchema" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="urn:WS/wsdl">
        <types>
            <xsd:schema targetNamespace="urn:WS/wsdl">
                <xsd:import namespace="http://127.0.0.1:1004/webservice/newXmlSchema" schemaLocation="newXmlSchema.xsd"/>
            </xsd:schema>
        </types>
        <message name="testXmlRequest">
            <part name="flux" type="ns:produit"/>
        </message>
        <message name="testXmlResponse">
            <part name="reponse" type="xsd:string"/>
        </message>
        <portType name="testPortType">
            <operation name="testXml">
                <input name="input1" message="tns:testXmlRequest"/>
                <output name="output1" message="tns:testXmlResponse"/>
            </operation>
        </portType>
        <binding name="testBinding" type="tns:testPortType">
            <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="testXml">
                <soap12:operation soapAction="soapXml"/>
                <input name="input1">
                    <soap12:body use="literal" namespace="urn:WS/wsdl"/>
                </input>
                <output name="output1">
                    <soap12:body use="literal" namespace="urn:WS/wsdl"/>
                </output>
            </operation>
        </binding>
        <service name="testService">
            <port name="testPort" binding="tns:testBinding">
                <soap12:address location="http://127.0.0.1:1004/webservice/server.php"/>
            </port>
        </service>
        <plnk:partnerLinkType name="test">
            <!-- A partner link type is automatically generated when a new port type is added. Partner link types are used by BPEL processes.
    In a BPEL process, a partner link represents the interaction between the BPEL process and a partner service. Each partner link is associated with a partner link type.
    A partner link type characterizes the conversational relationship between two services. The partner link type can have one or two roles.-->
            <plnk:role name="testPortTypeRole" portType="tns:testPortType"/>
        </plnk:partnerLinkType>
    </definitions>

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

Discussions similaires

  1. [Débutant] Web Service en XML RPC + VB.net (SSIS)
    Par Maduser dans le forum Services Web
    Réponses: 2
    Dernier message: 06/09/2012, 14h58
  2. un web service et xml
    Par salima198710 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 17/04/2012, 14h15
  3. web service ET XML
    Par saidaas dans le forum Services Web
    Réponses: 1
    Dernier message: 18/04/2010, 21h52
  4. Consommer un web service SOAP/XML
    Par wifsimster dans le forum XML/XSL et SOAP
    Réponses: 23
    Dernier message: 23/05/2009, 14h38
  5. [XML] Web Service/PHP/XML
    Par jokaris dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 04/08/2006, 13h01

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