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] créer un WS document/literal


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut [Web Service] créer un WS document/literal
    Bonjour,

    j'ai essayé de créer un ws en PHP (en ayant activé l'extension php_soap).

    Voici le 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
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions name="service" 
    	targetNamespace="serviceABCD" 
    	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    	xmlns:tns="serviceABCD" 
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    >
        <!-- Définition des types personnalisés -->
        <wsdl:types>
        	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="serviceABCD">
    			<xsd:element name="getDicton" type="tns:getDicton" />
    			<xsd:element name="getDictonResponse" type="tns:getDictonResponse" />
     
    			<xsd:complexType name="getDicton">
    				<xsd:sequence />
    			</xsd:complexType>
     
    			<xsd:complexType name="getDictonResponse">
    				<xsd:sequence>
    					<xsd:element name="return" type="xsd:string" />
    				</xsd:sequence>
    			</xsd:complexType>
        	</xsd:schema>
    	</wsdl:types>
     
     
    	<!-- Abstraction de plus haut niveau des paramètres -->    
        <!-- PortType : contient des abstractions de haut niveau des opération du service web -->
        <wsdl:message name="getDicton">
        	<wsdl:part name="parameters" element="tns:getDicton"></wsdl:part>
        </wsdl:message>
        <wsdl:message name="getDictonResponse">
        	<wsdl:part name="parameters" element="tns:getDictonResponse"></wsdl:part>
        </wsdl:message>
     
     
        <wsdl:portType name="IServiceABCD">
        	<wsdl:operation name="getDicton">
        		<wsdl:documentation>Méthode qui retourne un dicton..</wsdl:documentation>
        		<wsdl:input message="tns:getDicton" />
        		<wsdl:output message="tns:getDictonResponse"></wsdl:output>
        	</wsdl:operation>
        </wsdl:portType>
     
        <!-- Binding : définit le protocole à utiliser pour invoquer le service web -->
        <wsdl:binding name="BindingServiceABCD" type="tns:IServiceABCD">
        	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
        	<wsdl:operation name="getDicton">
        		<soap:operation soapAction="serviceABCD/getDicton" />
        		<wsdl:input>
        			<soap:body use="literal" />
        		</wsdl:input>
        		<wsdl:output>
        			<soap:body use="literal" />
        		</wsdl:output>
        	</wsdl:operation>
        </wsdl:binding>
     
        <!-- Définition du service à proprement parler -->
    	<!-- Contient l URL du service -->
        <wsdl:service name="ServiceABCD">
    		<wsdl:port name="PortServiceABCD" binding="tns:BindingServiceABCD">
    			<soap:address location="http://localhost/ServiceABCD/index.php" />
    		</wsdl:port>
    	</wsdl:service>
    </wsdl:definitions>
    Voici le serveur :

    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
     
    <?php
    	include_once('./modele/class.Commune.php');
     
    	// Si on a le paramètre wsdl, on doit afficher le wsdl
    	if (isset($_GET['wsdl']))
    	{
    		header("content-type: application/xml");
     
    		$file = "./service.wsdl";
    		$fp = fopen($file, "r");
    		$fluxXml = fread($fp, filesize($file));
    		fclose($fp);
    		echo $fluxXml;
     
    		exit;
    	} 
     
    	// première étape : désactiver le cache lors de la phase de test
    	ini_set("soap.wsdl_cache_enabled", "0");
     
    	// on indique au serveur à quel fichier de description il est lié
    	$serveurSOAP = new SoapServer('./service.wsdl');
     
    	// ajouter la fonction getDicton au serveur
    	$serveurSOAP->addFunction('getDicton');
     
    	// 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 getDicton() {
    		return utf8_encode("Un petit dicton...");
    	}
    ?>
    Je voudrais pouvoir consommer ce service web en java. J'ai utilisé l'outil wsimport fournit avec jax-ws. Mais l'appel à ma méthode ne fonctionne pas.

    J'ai essayé de construire un client php dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
        // première étape : désactiver le cache lors de la phase de test
        ini_set("soap.wsdl_cache_enabled", "0");
     
        // lier le client au fichier WSDL
        $clientSOAP = new SoapClient('./service.wsdl');
     
        echo "<br>Bonjour !!!<br>";
        echo "dicton : " . $clientSOAP->getDicton();
    ?>
    Mais lorsque j'exécute ma page client, voici le résultat affiché à l'écran :
    Bonjour !!!

    Catchable fatal error: Object of class stdClass could not be converted to string in I:\apache\www\ServiceABCD\client.php on line 8

    Si je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "dicton : " . $clientSOAP->getDicton();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<pre>";
        print_r($clientSOAP->getDicton());
    echo "</pre>";
    j'obtiens alors le résultat suivant :
    Bonjour !!!

    stdClass Object
    (
    )

    Avez-vous une idée pourquoi mon client PHP ne fonctionne pas ?
    Idem pour le client JAVA ?

    Merci beaucoup.
    F.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    En activant les logs au niveau du client PHP, en écrivant :
    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
    // Pour savoir ce qu'il se passe :
    $clientSOAP = new SoapClient('./service.wsdl',
    	array
    	(
    		"trace"      => 1,
    		"exceptions" => 0
    	)
    );
     
     
    $clientSOAP->getDicton();
     
    print "<br><br><pre>\n";
    print "Request :\n".htmlspecialchars($clientSOAP->__getLastRequest()) ."\n";
    print "Response:\n".htmlspecialchars($clientSOAP->__getLastResponse())."\n";
    print "</pre>"; 
    var_dump($result);
    j'ai pû identifier que le web service ne renvoie rien car j'obtiens le résultat suivant en ayant apporté les modifications ci-dessus :

    Bonjour !!!

    Request :
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="serviceABCD"><SOAP-ENV:Body><ns1:getDicton/></SOAP-ENV:Body></SOAP-ENV:Envelope>

    Response:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="serviceABCD"><SOAP-ENV:Body><ns1:getDictonResponse/></SOAP-ENV:Body></SOAP-ENV:Envelope>

    Notice: Undefined variable: result in I:\apache\www\ServiceABCD\client.php on line 33
    NULL

    J'ai une question toute bête :
    • Est-ce que PHP5 gère nativement les WSDL de style « document literal » ?

Discussions similaires

  1. [Débutant][WebServices] Créer un Web service en java
    Par JeffK dans le forum Services Web
    Réponses: 5
    Dernier message: 24/07/2011, 12h11
  2. Quelle est la meilleure solution pour créer des Web Services?
    Par Flipmode dans le forum Services Web
    Réponses: 1
    Dernier message: 26/04/2007, 15h12
  3. Créer un Web service
    Par norby042 dans le forum Services Web
    Réponses: 3
    Dernier message: 30/03/2007, 11h36
  4. Créer un client Web Service sous Eclipse et Windows
    Par Lebas dans le forum Services Web
    Réponses: 2
    Dernier message: 28/08/2006, 10h53
  5. Web Services : Mode Message/Document et Mode RPC
    Par Le Singe dans le forum Services Web
    Réponses: 3
    Dernier message: 07/02/2006, 13h39

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