Question

J'utilise PHP 5.2.10 et je suis en train de consommer un WebService qui retourne les types de données complexe en utilisant extension standard SOAP .

Le problème est que SoapClient ne remplit pas les objets qui sont imbriqués dans d'autres objets / tableau d'objets. Un exemple simplifié de ce que je reçois quand je l'appelle la méthode getUtente, spécifiant « my_unique_id » comme paramètre est:

stdClass Object
(
    [getUtenteReturn] => stdClass Object
        (
            [userName] => my_unique_id
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La partie pertinente de la description WDSL est:

<element name="getUtenteResponse">
  <complexType>
    <sequence>
      <element name="getUtenteReturn" type="tns1:Cliente"/>
    </sequence>
  </complexType>
</element>
...
<complexType name="Utilizzatore">
  <sequence>
    <element name="userName" nillable="true" type="xsd:string"/>
  </sequence>
</complexType>
...
<complexType name="Cliente">
  <complexContent>
    <extension base="tns1:Utilizzatore">
      <sequence> 
        <element name="fieldOne" nillable="true" type="xsd:string"/>
        <element name="fieldTwo" nillable="true" type="xsd:string"/>
        <element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Ce que je trouve que je ne suis pas le seul à subir ce problème. En particulier, je trouve ce commentaire dans la documentation officielle et PHP cette autre entrée de forum pour donner deux idées différentes sur la façon d'aborder la problème, mais je n'ai pas été en mesure de tourner l'une de ces deux idées dans solution de travail :. Je semble ne pas comprendre complètement la logique derrière les exemples donnés

Je vous serais reconnaissant si quelqu'un pouvait me guider dans ceci: un code de travail sur un autre webservice serait la bienvenue, mais ce que je suis avant tout après est vraiment la compréhension du problème et la logique des solutions proposées (la voie de poisson, pas poisson!). :)

Était-ce utile?

La solution

Vieille question, pas de réponse. Je suis récemment tombé sur ce poste, qui explique le problème et donne une solution: SOAP Consommant complexType webservice avec PHP .

Autres conseils

Voici mes pensées immédiates, désolé ce n'est pas une réponse appropriée, juste quelques idées ...

Tout d'abord, avez-vous essayé de visualiser la demande de savon (l'enveloppe) envoyée au serveur de savon? Est-ce que ça ressemble ça devrait fonctionner? Pouvez-vous voir où il va mal? Venez vous juste une erreur de retour, un SOAPFault ou des données erronées, ou rien du tout?

Deuxièmement, avez-vous essayé d'utiliser la classe SoapParam?

Enfin, je suis sûr que vous faites ce droit, mais je remarque que l'objet que vous construisez et a le nom d'utilisateur et FieldOne fieldTwo tous côte à côte, mais votre WSDL montre que FieldOne et fieldTwo font partie de la classe Cliente (ce qui montre jamais dans votre exemple), alors que le nom d'utilisateur doit être à l'intérieur du tableau de utilizzatore, donc il ne devrait pas être plus comme:

stdClass Object
(
    [Cliente] => stdClass Object
        (
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La classe SoapClient est très frustrant pour moi, donc ne pas prendre tout cela comme une critique, parce que je n'espère mieux comprendre moi-même en offrant des idées qui pourraient vous aider.

Mac, merci beaucoup pour vos réponses rapides. regardez ce que je tombai sur .. Je n'ai pas regardé plus tôt. veulent donc partager cette .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top