Frage

Ich bin mit PHP 5.2.10 und ich versuche, eine Webservice zu konsumieren die Renditen komplexe Datentypen mit dem Standard-SOAP-Erweiterung .

Das Problem ist, dass Soapclient nicht bevöl Objekte, die in anderen Objekten / Array von Objekten verschachtelt sind. Ein vereinfachtes Beispiel dafür, was ich bekomme, wenn ich die getUtente Methode aufrufen, „my_unique_id“ als Parameter spezifiziert ist:

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
                )

        )

)

Der relevante Teil der WDSL Beschreibung:

<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>

Was ich fand, ich bin nicht der einzige, der dieses Problem auftritt. Insbesondere fand ich dieser Kommentar in der PHP-offiziellen Dokumentation und dieser andere Forum Eintrag zwei verschiedene Ideen zu geben, wie der Ansatz Problem, aber ich habe nicht in der Lage gewesen, eine dieser beiden Ideen drehen in ein Arbeitslösung : ich scheine nicht vollständig die Logik hinter den Beispielen zu verstehen gegeben

Ich wäre dankbar, wenn mir jemand in diesem Handbuch könnte: einiger Arbeitscode auf einem anderen Webservice willkommen wäre, aber was ich in erster Linie nach dem mir wirklich das Problem zu verstehen und die Logik der vorgeschlagenen Lösungen (die Fische weg, nicht die Fisch!). :)

War es hilfreich?

Lösung

Alte Frage, keine Antwort. Ich stolperte vor kurzem zu diesem Beitrag, dass das Problem und gibt eine Lösung, erklärt: konsumieren SOAP complex Webservice mit PHP .

Andere Tipps

Hier sind meine Gedanken sofort, leider ist dies nicht eine richtige Antwort, nur ein paar Ideen ...

Als erstes haben Sie versucht, die Anzeige der Seife Anfrage (der Umschlag) an den SOAP-Server gesendet? Sieht es so aus wie es funktionieren soll? Können Sie sehen, wo es schief läuft? Sind Sie gerade einen Fehler zurück, einen SoapFault bekommen, oder die falschen Daten oder gar nichts?

Zweitens haben Sie versucht, die SoapParam-Klasse?

Schließlich, ich bin sicher, dass Sie dieses Recht tun, aber ich merke, dass das Objekt, das Sie bauen hat Benutzername und fieldOne und fieldTwo alle nebeneinander, aber Ihre WSDL zeigt, dass fieldOne und fieldTwo ist Teil der Klasse Cliente (was zeigt, nie in Ihrem Beispiel oben), während Benutzername sollte innerhalb des utilizzatore Array sein, so sollte es nicht mehr sein wie:

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

        )

)

Die Soapclient-Klasse ist sehr frustrierend für mich, nehmen Sie so nichts davon als Kritik, weil ich hoffe, nur besser, es selbst zu verstehen, durch Ideen anbieten, die Ihnen helfen kann.

Mac, vielen Dank für Ihre schnellen Antworten. Blick auf das, was ich auf getrommelt .. Ich habe zu diesem früheren sehen nicht. Daher wollen Aktie diese .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top