Rückgabe Ein Array von Objekten in PHP-Web-Service
Möchte ich return ein array von Artikel-Objekten in einer PHP-web-service, mit nuSOAP v 1.114. Dies ist, wie ich die WSDL:
$server->wsdl->addComplexType(
'ArticleType',
'complexType',
'struct',
'all',
'',
array('articleId' => array('name'=>'articleId', 'type'=>'xsd:int'),
'heading' => array('name'=>'heading', 'type'=>'xsd:string'),
'text' => array('name'=>'text', 'type'=>'xsd:string')
)
);
$server->wsdl->addComplexType(
'ArrayOfArticleType',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:ArticleType[]' //ArticleType[]
)
),
'tns:ArticleType'
);
Meine PHP-Artikel-Klasse ist sehr einfach:
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
Wenn ich wieder nur ein neues Artikel-Objekt, wie folgt:
function TestArrayReturn() {
$arr = new Article(12345, "Test heading", "Test text.");
//$arr2 = array($arr);
return $arr;
}
die Funktion, registriert als:
$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');
funktioniert gut, und gibt die Artikel, als ob es ein Array. Jedoch wenn ich versuchen und eine ArrayOfArticleType (die auskommentierte Zeile in TestArrayReturn() ), und registrieren Sie die Funktion als return-Typ tns:ArrayOfArticleType, dann schlägt es fehl mit Fehler: HTTP-Fehler: keine Daten vorhanden nach dem HTTP-Header.
Wenn ich allerdings erstellen Sie ein ARRAY von ARRAYS manuell, etwa so:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
es funktioniert!? Was ist Los mit meinem ArrayOfArticleType WSDL-Beschreibung, die nicht zulässt, dass es korrekt zu serialisieren ArticleType Objekte, sondern korrekt serialisieren ein assoziatives array mit den gleichen Eigenschaften ("artikelID", "überschrift", "text") ??
Sorry für den code, aber ich glaube, es ist notwendig, zu lokalisieren, die Fehler, die ich im Blick. Jede Hilfe zu schätzen, ich habe gekämpft mit dem Aufbau der WSDL dieser Dienst für für Tage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fixiert diesen Fehler. Für alle interessierten, dies scheint ein bug in NuSOAP. Sie MÜSSEN sich registrieren, Ihre returnType für die Funktion als xsd:Array für es ordnungsgemäß zurückgeben, die Reihe, obwohl die korrekte WSDL-wäre es, als "tns:ArrayOfArticleType'. Ich fand dies in einigen Drupal-Quellcode:
Hoffe, das hilft jemanden weiter, kämpfte mit dem gleichen problem.
Hier wird z.B. client-und server-für, wie gibt ein array zurück mit php-web-service.Es ist leicht Beispiel zu verstehen
http://my-source-codes.blogspot.com/2011/10/php-web-service-return-array.html