nuSOAP v 1.114を使用して、PHPWebサービスで記事オブジェクトの配列を返したい。これが私が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'
);
私のPHPArticleクラスは非常に単純です。
class Article {
public $articleId;
public $heading;
public $text;
public function __construct($articleId, $heading, $text=NULL) {
$this->articleId = $articleId;
$this->heading = $heading;
$this->text = $text;
}
}
次のように、新しいArticleオブジェクトだけを返す場合:
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ヘッダーの後にデータがありませんで失敗します。
ただし、次のように、手動でARRAYのARRAYを作成する場合:
$arr = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
$arr2 = array("articleId"=>12345, "heading"=>"Test heading", "text"=>"Test text");
return array($arr, $arr2);
できます!?ArticleTypeオブジェクトを正しくシリアル化できないが、同じプロパティ( "articleId"、 "heading"、 "text")を持つ連想配列を正しくシリアル化できないArrayOfArticleType WSDL記述の何が問題になっていますか?
すべてのコードについて申し訳ありませんが、私が見落としているエラーを特定する必要があると感じています。助けていただければ幸いです。私はこのサービスのWSDLの設定に何日も苦労してきました。