Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-07-2009 17:19:25

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

[Zend_Soap][1.8.4] Problème avec le fichier WSDL

Salut,

En essayant de mettre en place un simple Web Service Soap, à l'aide des classes Zend_Soap_*, je rencontre quelques erreurs.

Tout d'abord voici le contenu de mon contrôleur :

Code:

<?php

class Soap_IndexController
{

    
    /**
     * SOAP server action
     */
    public function indexAction()
    {
        try {
            $options = array('soap_version' => SOAP_1_1);
            $server = new Zend_Soap_Server('http://.../soap/index/wsdl', $options);
            $server->setClass('My_Soap');
            $server->handle();
        } catch ( SoapFault $e ) {
            print_r($e);
        }
        exit;        
    }
    
    /**
     * Action that renders WSDL
     */
    public function wsdlAction()
    {    
        $wsdl = new Zend_Soap_AutoDiscover();
        $wsdl->setClass('My_Soap');
        $wsdl->handle();
        exit;    
    }
    
    /**
     * SOAP client action
     */
    public function clientAction()
    {
        try {
            $client = new Zend_Soap_Client('http://.../soap/index/wsdl');
            $response = $client->sayHello();
            var_dump($response);
        } catch ( SoapFault $e ) {
            print_r($e);
        }
        exit;
    }

    
}

Et ensuite celui de la classe appelée par l'Autodiscover :

Code:

class My_Soap
{
    
    public function sayHello()
    {
        echo 'hello';
        return true;
    }
    
    
}

En appelant, mon action "wsdl", j'obtiens ce fichier (qui me semble à première vue correct) :

Code:

<definitions name="My_Soap" targetNamespace="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl">
    <portType name="My_SoapPort">
        <operation name="sayHello">
            <input message="tns:sayHelloRequest"/>
            <output message="tns:sayHelloResponse"/>
        </operation>
    </portType>
    <binding name="My_SoapBinding" type="tns:My_SoapPort">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="sayHello">
            <soap:operation soapAction="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl#sayHello"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>
    <service name="My_SoapService">
        <port name="My_SoapPort" binding="tns:My_SoapBinding">
            <soap:address location="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl"/>
        </port>
    </service>
    <message name="sayHelloRequest"/>
</definitions>

Le problème qui se passe est qu'en appelant le client (action "client" du contrôleur ci-dessus), j'obtiens ce message :

Code:

SOAP-ERROR: Parsing WSDL: Missing  with name 'tns:sayHelloResponse'

Et en appelant le serveur (action "index" du contrôleur ci-dessus) j'ai celui-ci :

Code:

<SOAP-ENV:Envelope>
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>WSDL</faultcode>
            <faultstring>
                SOAP-ERROR: Parsing WSDL: Missing <message> with name 'tns:sayHelloResponse'
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Est-ce que le WSDL généré par Zend_Soap_AutoDiscover est invalide ?

Hors ligne

 

#2 20-07-2009 17:38:21

EffigieCreations
Membre
Date d'inscription: 12-06-2009
Messages: 33
Site web

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

J'ai le même problème, la WSDL semble contenir une erreur mais je ne vois pas laquelle... J'ai aussi pensé à un problème de charset...

Si qqun ayant réussi a utiliser ça pouvait nous aider :s

Julien.

Hors ligne

 

#3 20-07-2009 17:50:02

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

il me semble qui faut mettre des commentaires type javadoc avant la fonction pour caractériser le type de retour
le système d'introspection ne peut pas deviner les type utiliser dans la signature des methodes php vu que php est faiblement typé alors que soap est lui fortement typé

A+JYT

Hors ligne

 

#4 20-07-2009 18:09:18

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

Effectivement de rajouter des "Doc Comments" semble corriger une partie de l'erreur. Merci wink

La classe :

Code:

<?php

class My_Soap
{

    /**
     * @return bool
     */
    public function sayHello()
    {
        echo 'hello';
        return true;
    }
    
    
}

Le WSDL :

Code:

<definitions name="My_Soap" targetNamespace="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl">
    <portType name="My_SoapPort">
        <operation name="sayHello">
            <input message="tns:sayHelloRequest"/>
            <output message="tns:sayHelloResponse"/>
        </operation>
    </portType>
    <binding name="My_SoapBinding" type="tns:My_SoapPort">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="sayHello">
            <soap:operation soapAction="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl#sayHello"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>
    <service name="My_SoapService">
        <port name="My_SoapPort" binding="tns:My_SoapBinding">
            <soap:address location="http://webserver.local/tst_php/soap/fr/frontend/soap/index/wsdl"/>
        </port>
    </service>
    <message name="sayHelloRequest"/>
    <message name="sayHelloResponse">
        <part name="return" type="xsd:boolean"/>
    </message>
</definitions>

Le problème qui se pose toujours en appelant le client (action "client" du contrôleur)  :

Code:

Wrong Version

Et en appelant le serveur (action "index" du contrôleur) j'obtiens ce message :

Code:

<SOAP-ENV:Envelope>
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>Sender</faultcode>
            <faultstring>Invalid XML</faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Est-ce que de définir l'option "soap_version" de Zend_Soap_Client et Zend_Soap_Server est obligatoire ?

Dernière modification par acharrex (28-07-2009 17:55:43)

Hors ligne

 

#5 28-07-2009 17:56:38

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

Je me permets un petit up car ce problème est vraiment dérangeant.

Est-ce que cette librairie est totalement fonctionnelle ?

Hors ligne

 

#6 29-07-2009 14:48:55

EffigieCreations
Membre
Date d'inscription: 12-06-2009
Messages: 33
Site web

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

Le message continu a s'afficher lorsque j'affiche lse serveur mais dès que je fas un test avec un script client ça fonctionne !

Essaie de faire un appel depuis un script client.

Hors ligne

 

#7 31-07-2009 14:38:16

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Soap][1.8.4] Problème avec le fichier WSDL

Merci mais j'ai toujours le même problème. Je vais continuer à chercher mais je ne comprends pas pourquoi il est s'y "compliqué" de mettre en place un service SOAP fonctionnel... est-ce que XML-RPC ou REST sont plus maniables ? A voir...

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages