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

XML/XSL et SOAP Discussion :

[PHP][SOAP] WSDL et la section TYPES


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [PHP][SOAP] WSDL et la section TYPES
    je viens de créer un WebService dont voici le contenu de mon 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
    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
    <?xml version="1.0"?>
    <!-- partie 1 : Definitions -->
    <definitions name="HistoneCrossway" 
    	targetNamespace="urn:HistoneCrossway" 
    	xmlns:typens="urn:HistoneCrossway" 
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    	xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    	xmlns="http://schemas.xmlsoap.org/wsdl/">
     
    	<!-- partie 2 : Types-->
    	<types>
    		<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
    			targetNamespace="urn:HistoneCrossway">
    				<xsd:element name="ContentNIP">
    					<xsd:complexType>
    						<xsd:sequence>
    							<xsd:element name="A" minOccurs="1" maxOccurs="1" type="xsd:string" />
    							<xsd:element name="B" minOccurs="0" maxOccurs="1" type="xsd:string" />
    							<xsd:element name="C" minOccurs="1" maxOccurs="1" type="xsd:string" />
    						</xsd:sequence>
    					</xsd:complexType>
    				</xsd:element>
    		</xsd:schema>
    	</types> 
     
    	<!-- partie 3 : Message -->
    	<message name="getNIPContentIN">
    		<part name="nip" type="xsd:string"/>
    	</message>
    	<message name="getNIPContentOUT">
    		<part name="return" type="xsd:ContentNIP"/>
    	</message>
     
    	<!-- partie 4 : Port Type -->
    	<portType name="NIPContentPort">
    		<!-- partie 5 : Operation -->
    		<operation name="getNIPContent">
    			<input message="typens:getNIPContentIN"/>
    			<output message="typens:getNIPContentOUT"/>
    		</operation>
    	</portType>
     
    	<!-- partie 6 : Binding -->
    	<binding name="NIPContentBinding" type="typens:NIPContentPort">
    		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    		<operation name="getNIPContent">
    			<soap:operation soapAction="NIPContentAction"/>
    			<input name="getNIPContentIN">
    				<soap:body use="encoded" 	
    						namespace="urn:HistoneCrossway" 	
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</input>
    			<output name="getNIPContentOUT">
    				<soap:body  use="encoded" 	
    						namespace="urn:HistoneCrossway" 
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</output>
    		</operation>
    	</binding>
     
    	<!-- partie 7 : Service -->
    	<service name="NIPContentService">
    		<documentation>RETOURNE A, B, C</documentation>
    		<!-- partie 8 : Port -->
    		<port name="NIPContentPort" binding="typens:NIPContentBinding">
    			<soap:address location="http://localhost/soap.php"/>
    		</port>
    	</service>
    </definitions>
    Ainsi que 2 fichiers PHP :
    soap.php qui est le serveur SOAP
    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
    <?php
    ini_set("soap.wsdl_cache_enabled", "0");
    $serveurSOAP = new SoapServer('HistoneCrossway.wsdl');
    $serveurSOAP->addFunction('getNIPContent');
    // lancer le serveur
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
            $serveurSOAP->handle();
    }
    else
    {
            echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
    }
    function getNIPContent($nip)
    {
            return array("A"=>$nip."_A", "B"=>$nip."_B");
    }
    ?>
    et mon client SOAP, client-soap.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    ini_set("soap.wsdl_cache_enabled", "0");
    $clientSOAP = new SoapClient('HistoneCrossway.wsdl');
    print_r($clientSOAP->getNIPContent('Marc'));
    ?>
    Le problème est le suivant, dans la définition des types j'ai spécifié que l'élément "B" n'était pas obligatoire par le biais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    minOccurs="0" maxOccurs="1"
    et les éléments "A" et "C" sont obligatoire pat le biais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    minOccurs="1" maxOccurs="1"
    . Hors dans ma fonction "getNIPContent", au niveau du serveur, cela ne pose aucun problème de que l'élément "C" ne soit pas spécifié. Est ce normal ? Comment je peux vérifier que l'élément complexe "ContentNIP" respecte bien la définition déclaré ?

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    ça ne me paraît pas vraiment normal... Il semblerait que l'implémentation des WS dans PHP soit plus laxiste concernant la réponse que pour les paramètres d'entrée. As-tu vérifié que les valeurs retournées correspondaient bien à leurs noms (par exemple, si tu omets B et que tu renvoies C, que la valeur de C apparaisse bien dans C et non dans B) ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour en modifiant cette section :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <message name="getNIPContentOUT">
    		<part name="return" type="xsd:ContentNIP"/>
    </message>
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <message name="getNIPContentOUT">
    		<part name="return" element="typens:ContentNIP"/>
    </message>
    je récupère bien une erreur SOAP.
    j'en conclu qu'il s'agit d'une mauvaise définition de mon fichier WSDL.

    En vous remerciant

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

Discussions similaires

  1. WEBSERVICE PHP SOAP WSDL
    Par vercomax dans le forum Langage
    Réponses: 3
    Dernier message: 17/04/2013, 19h42
  2. [Web Service] Utilisation de PHP / SOAP / WSDL / XML
    Par soufian2290 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/01/2013, 15h10
  3. [Web Service] PHP SOAP WSDL : string et max lenght ?
    Par stefdenice dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/06/2011, 11h23
  4. [PHP] comment utiliser soap & wsdl ?
    Par alaindu18 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 08/09/2008, 16h19
  5. [SOAP] [WSDL] [PHP] Problème création du fichier WSDL (Débutant)
    Par Guybrush113 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/09/2007, 12h45

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