我想回到文章对象的数组在PHP Web服务,使用的NuSOAP v 1.114。 这是我如何设置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'
);
我的PHP Article类是非常简单的:
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
如果我只返回一个新的文章对象,就像这样:
function TestArrayReturn() {
$arr = new Article(12345, "Test heading", "Test text.");
//$arr2 = array($arr);
return $arr;
}
功能,注册为:
$server->register("TestArrayReturn", array(), array('return'=>'tns:ArticleType'), $namespace, $namespace."#TestArrayReturn", 'rpc', 'encoded', 'Test function');
做工精细,并返回文章,就好像它是一个数组。 然而,如果我尝试,并返回一个ArrayOfArticleType(在TestArrayReturn的注释行()),并注册该功能的返回类型TNS:ArrayOfArticleType,则失败,错误:HTTP错误:无数据的HTTP标头之后存在。
但是,如果我手动创建一个数组的数组,就像这样:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
有用!? 有什么不对我ArrayOfArticleType WSDL描述,不允许它正确地序列ArticleType对象,但正确地序列具有相同属性(“条款ArticleID”,“标题”,“文本”)的关联数组?
对不起,所有的代码,但我觉得有必要找出我俯瞰错误。 任何帮助表示赞赏,我一直在挣扎设立此服务的好几天。