4 Stimmen

PHP SoapClient Aufruf Antwort fehlen Teile der Antwort

Ich habe Probleme mit dem PHP-Parser des Antwortaufrufs eines SoapClients. Für einige Arten von Antworten gibt es anstelle von initialisierten stdClass-Objekten Arrays leerer stdClass-Objekte.

Der Server ist ein Java-Webservice, der mit Axis2 auf Tomcat6 bereitgestellt wird. Die Java-Signatur des problematischen Service-Aufrufs lautet public Course getCourseDetails(Long courseId). Course ist ein standardmäßiges POJO, das wie folgt definiert ist:

public class Course {
    private Long id;
    private List holes;
    private String name;
    private String tees;

    //usw...
}

Hole ist ein standardmäßiges POJO mit nur primitiven Elementen.

Bei Verwendung von PHP ist das holes-Element ein Array mit der korrekten Länge, aber jedes Loch ist leer.

$args = array();
$args["courseId"] = $courseId;
$response = $client->getCourseDetails($args);
$course = $response->return;
//course hat alle seine primitiven Elemente korrekt gesetzt: gut
$holes = $course->holes;
//holes ist ein Array mit count = 18: gut
$hole = $holes[0];
//hole ist ein leeres stdClass: schlecht

Beim Ausdrucken des zurückgegebenen XML mit $soapClient->__getLastResponse() sieht es wie die richtige Darstellung aus:

Faketown, VA
Fake Links
2003-01-02
114345
223150
335502
444345
554345
664345
774345
884345
994345
10104345
11114345
12124345
13134345
14144345
15154345
16164345
17174345
18184345
1
68.5
113
Blue

Warum sind alle Löcher leere stdClass-Objekte? Gibt es bekannte Einschränkungen für die Anzahl der Ebenen, die ein SoapClient analysiert?

0 Stimmen

Ich habe das gleiche Problem. Ich habe einen Kommentar zum Bug hinzugefügt. Ich hatte Schwierigkeiten, einen Kommentar zum Bug hinzuzufügen aufgrund von bugs.php.net/bug.php?id=48126

0voto

ChrAesch Punkte 1

Für mich war das Problem ein fehlendes Feld in der Definition des Schemas.

Die Daten wurden korrekt übertragen, aber PHP zeigte nur die Felder an, die im entfernten Schema aufgelistet waren.

Also musste ich das Serviceschema neu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X