Bonjour à tous.
Je travaille actuellement sur un client SOAP pour un webservice exterieur. Tous mon code est executé sur un serveur Debian Lenny à jour (donc PHP 5.2.6.dfsg.1-1+lenny8).
J'ai entre les main un combiné wsdl / xsd fournit par la source. Celui-ci me pose deux problèmes :
- Impossible d'utiliser des éléments avec "ref"
Lorsque je déclare mon client SOAP en incluant un wsdl contenant des élément avec des référence, php envoie une erreur.
Par exemple :
Code :
- <xsd:element ref="complement_numero" minOccurs="0" />
|
provoque une erreur :
SOAP-ERROR: Parsing Schema: unresolved element 'ref' attribut |
Est-ce une limitation de l'implémentation de SOAP dans PHP ?
- Incapacité à utiliser des éléments "choice"
Certains types complexes de mes xsd comportent des choix.
Exemple :
Code :
- <xsd:element name="personne">
- <xsd:complexType>
- <xsd:choice>
- <xsd:group name="elgrp_personne_physique_simple" minOccurs="0">
- <xsd:annotation>
- <xsd:documentation xml:lang="fr">Definition de l objet personne physique sans les informations de naissance</xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="nom_naissance" type="etatCivil" />
- <xsd:element name="prenom" type="etatCivil" />
- <xsd:element name="nom_usage" type="etatCivil" minOccurs="0" />
- <xsd:element name="sexe" type="sexe" />
- </xsd:sequence>
- </xsd:group>
- <xsd:group name="elgrp_personne_morale" minOccurs="0">
- <xsd:annotation>
- <xsd:documentation xml:lang="fr">Definition de l objet personne morale</xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="raison_sociale" type="etatCivil" />
- <xsd:element name="siren" type="eltyp_siren" minOccurs="0" />
- <xsd:element name="societe_commerciale" type="elty_bool" />
- </xsd:sequence>
- </xsd:group>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
|
Lorsque je créer mon contenu SOAP via php, deux cas de figure se présentent :
Code :
- 'personne' => array (
- 'nom_naissance' => "Toto",
- 'prenom' => "Tata",
- 'sexe' => "M",
- 'societe_commerciale' => "oui",
- 'raison_sociale' => "TOTO-AUTO-R",
- 'siren' => "XXXXXXX"
- ),
|
Ce code me génère un XML valide, contenant ceci :
Code :
- <ns1:personne>
- <ns1:nom_naissance>Toto</ns1:nom_naissance>
- <ns1:prenom>Tata</ns1:prenom>
- <ns1:sexe>M</ns1:sexe>
- </ns1:personne>
|
Seul le cas de la personne physique est traité, on a aucune info sur une société commerciale. Ce comportement est OK.
Par contre,
Code :
- 'personne' => array (
- 'societe_commerciale' => "oui",
- 'raison_sociale' => "TOTO-AUTO-R",
- 'siren' => "XXXXXXX"
- ),
|
ce code ne permet pas de générer de XML :
SOAP-ERROR: Encoding: object hasn't 'nom_naissance' property |
Le choix ne semble donc pas être interprété. Si on n'a pas la première occurrence (personne physique), c'est le drame.
Quelqu'un a-t-il déjà été confronté à l'un (ou les deux) de ces problèmes.
Par avance merci à vous pour votre aide !