Desidero restituire una matrice di oggetti dell'articolo in un servizio Web PHP, utilizzando nuSOAP v 1.114. Questo è il modo ho creato il WSDL:Restituzione di una matrice di oggetti nel servizio Web PHP
$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'
);
La mia classe PHP articolo è molto semplice:
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
Se torno solo un nuovo articolo oggetto, in questo modo:
function TestArrayReturn() {
$arr = new Article(12345, "Test heading", "Test text.");
//$arr2 = array($arr);
return $arr;
}
la funzione, registrato come:
$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');
funziona correttamente e restituisce l'articolo come se fosse una matrice. Tuttavia, se provo a restituire un oggetto ArrayOfArticleType (la riga commentata in TestArrayReturn()), e registro la funzione come tipo restituito tns: ArrayOfArticleType, quindi non riesce con Errore: Errore HTTP: nessun dato presente dopo le intestazioni HTTP.
Se, tuttavia, io creo un array di array manualmente, in questo modo:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
funziona !? Cosa c'è di sbagliato nella mia descrizione WSDL di ArrayOfArticleType che non gli permette di serializzare correttamente gli oggetti ArticleType, ma serializzare correttamente un array associativo con le stesse proprietà ("articleId", "heading", "text") ??
Ci scusiamo per tutto il codice, ma ritengo sia necessario individuare l'errore che sto trascurando. Qualsiasi aiuto è apprezzato, ho faticato con l'impostazione del WSDL per questo servizio per giorni.
Il bit sull'impostazione del valore di ritorno al 'xsd: Array' indipendentemente dal personalizzato definito ComplexType mi ha salvato! Bene, dopo circa una settimana di inseguimento di questo bug * UnDocumented * in NuSOAP. – Kingsolmn
Non sono in PHP. Dove metti quel codice? –