Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-01-2012 09:23:20

morrendo
Nouveau membre
Date d'inscription: 20-12-2011
Messages: 3

[1.11] Serveur Soap et nom des class

Bonjour,

Je développe un petit web service avec le framework de Zend. Dans un premier temps, ça fonctionné parfaitement. Mais une fois que j'essai de structurer le code, ça ne fonctionne plus.

Le but du serveur est de retourner des objets de type "utilisateur". Dans un premier temps, j'ai mis la class utilisateur dans le même fichier que ma class métier SOAP ( qui s'occupe de renvoyer les objets au client ).

Voici le code :

Code:

[lang=php]
<?php
class Soaptest {
    
    /**
     * Retourne un utilisateur
     *
     * @return utilisateur
     */
    public function getUtilisateur()
    {
        $utilisateur = new utilisateur(2, 'damien');
        
        return $utilisateur;
    }
    
    
    /**
     * Retourne un tableau d'utilisateur
     *
     * @return utilisateur[]
     */
    public function getLesUsers()
    {
        $lesUsers = array(new utilisateur(2, 'damien'), new utilisateur(3, 'jean'));
        return $lesUsers;
    }
}





/**
 * Class utilisateur
 *
 * @package classpackage
 * @access public
 */
class utilisateur
{
    /**
     * ID
     * @access private
     * @var integer
     */
    public $id;
    /**
     * IDENTIFIANT
     * @access private
     * @var string
     */
    public $identifiant;    
    
    
    /**
     * Constructeur d'un utilisateur
     * @param integer $unId
     * @param string $unIdentifiant
     * @return utilisateur
     * @access public
     */
    public function utilisateur($unId, $unIdentifiant)
    {
        $this->id = $unId;
        $this->identifiant = $unIdentifiant;
        
        return $this;
    }
}

Ceci fonctionne très bien. Je récupère les objets dans un client développé en Delphi. Par soucis de propreté, je voudrais mettre la class "utilisateur" dans le dossier "application\modules\default\models\metier\"

Voici la déclaration de la class :

Code:

[lang=php]
<?php
/**
 * Class Default_Model_Metier_Utilisateur
 *
 * @package classpackage
 * @access public
 */
class Default_Model_Metier_Utilisateur
{
    /**
     * ID
     * @access private
     * @var integer
     */
    public $id;
    /**
     * IDENTIFIANT
     * @access private
     * @var string
     */
    public $identifiant;

    /**
     * Constructeur d'un utilisateur
     * @param integer $unId
     * @param string $unIdentifiant
     * @return utilisateur
     * @access public
     */
    public function utilisateur($unId, $unIdentifiant)
    {
        $this->id = $unId;
        $this->identifiant = $unIdentifiant;

        return $this;
    }
}

j'obtiens ce WSDL :

Code:

[lang=xml]
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://127.0.0.1/intersud/public/soap" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Soaptest" targetNamespace="http://127.0.0.1/intersud/public/soap">
<types>
<xsd:schema targetNamespace="http://127.0.0.1/intersud/public/soap">
<xsd:complexType name="Default_Model_Metier_Utilisateur">
<xsd:all>
<xsd:element name="id" type="xsd:int" nillable="true"/>
<xsd:element name="identifiant" type="xsd:string" nillable="true"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="ArrayOfDefault_model_metier_utilisateur">
<xsd:sequence>
<xsd:element name="item" type="tns:Default_Model_Metier_Utilisateur" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<portType name="SoaptestPort">
<operation name="getUtilisateur">
<documentation>Retourne un utilisateur</documentation>
<input message="tns:getUtilisateurIn"/>
<output message="tns:getUtilisateurOut"/>
</operation>
<operation name="getLesUsers">
<documentation>Retourne un tableau d'utilisateur</documentation>
<input message="tns:getLesUsersIn"/>
<output message="tns:getLesUsersOut"/>
</operation>
</portType>
<binding name="SoaptestBinding" type="tns:SoaptestPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getUtilisateur">
<soap:operation soapAction="http://127.0.0.1/intersud/public/soap#getUtilisateur"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/intersud/public/soap"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/intersud/public/soap"/>
</output>
</operation>
<operation name="getLesUsers">
<soap:operation soapAction="http://127.0.0.1/intersud/public/soap#getLesUsers"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/intersud/public/soap"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/intersud/public/soap"/>
</output>
</operation>
</binding>
<service name="SoaptestService">
<port name="SoaptestPort" binding="tns:SoaptestBinding">
<soap:address location="http://127.0.0.1/intersud/public/soap"/>
</port>
</service>
<message name="getUtilisateurIn"/>
<message name="getUtilisateurOut">
<part name="return" type="tns:Default_Model_Metier_Utilisateur"/>
</message>
<message name="getLesUsersIn"/>
<message name="getLesUsersOut">
<part name="return" type="tns:ArrayOfDefault_model_metier_utilisateur"/>
</message>
</definitions>

Enfin, quand j'appel la fonction getUtilisateur(), j'obtiens le XML suivant :

Code:

[lang=xml]
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://127.0.0.1/intersud/public/soap" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:getUtilisateurResponse>
         <return xsi:type="ns1:Default_Model_Metier_Utilisateur">
            <id xsi:nil="true"/>
            <identifiant xsi:nil="true"/>
         </return>
      </ns1:getUtilisateurResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Alors qu'avec le déclaration dans la class utilisateur dans le même fichier que ma class métier SOAP, j’obtiens le XML suivant :

Code:

[lang=xml]
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://127.0.0.1/intersud/public/soap" 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:Body>
      <ns1:getUtilisateurResponse>
         <return xsi:type="ns1:utilisateur">
            <id xsi:type="xsd:int">2</id>
            <identifiant xsi:type="xsd:string">damien</identifiant>
         </return>
      </ns1:getUtilisateurResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Merci pour votre aide smile

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