Deseo devolver una matriz de objetos de artículo en un servicio web de PHP, utilizando nuSOAP v 1.114. Así es como me juego hasta la WSDL:Devolución de una matriz de objetos en el servicio web de 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'
);
Mi clase PHP artículo es muy simple:
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
Si regreso a un nuevo artículo de objetos, como este:
function TestArrayReturn() {
$arr = new Article(12345, "Test heading", "Test text.");
//$arr2 = array($arr);
return $arr;
}
la función, registrada como:
$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');
funciona bien y devuelve el artículo como si fuera una matriz. Sin embargo, si intento devolver un ArrayOfArticleType (la línea comentada en TestArrayReturn()) y registro la función como return type tns: ArrayOfArticleType, entonces falla con Error: HTTP Error: no hay datos presentes después de los encabezados HTTP.
Si, sin embargo, crear una matriz de matrices de forma manual, así:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
funciona !? ¿Qué hay de malo en mi descripción de ArrayOfArticleType WSDL que no permite serializar correctamente los objetos de ArticleType, pero serializar correctamente una matriz asociativa con las mismas propiedades ("articleId", "heading", "text") ??
Lo siento por todo el código, pero creo que es necesario identificar el error que estoy pasando por alto. Cualquier ayuda apreciada, he estado luchando con la configuración de WSDL para este servicio por días.
El poco acerca de cómo establecer el valor de retorno a 'xsd: Array' independientemente de la costumbre definido ComplexType me salvó! Bueno, después de aproximadamente una semana de perseguir este error * No documentado * en NuSOAP. – Kingsolmn
No estoy en PHP. ¿Dónde colocas ese código? –