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.

InformationsquelleAutor gouwsmeister | 2009-09-22
Schreibe einen Kommentar