nuSOAP v 1.114を使用してPHP Webサービスで記事オブジェクトの配列を返したいとします。これは私がWSDLを設定する方法です:PHP Webサービスでオブジェクトの配列を返す
$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の記事のクラスは非常に単純です:
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);
それは動作します! ArticleTypeオブジェクトを正しくシリアル化することはできませんが、同じプロパティ( "articleId"、 "heading"、 "text")を持つ連想配列を正しくシリアル化することができないArrayOfArticleType WSDLの説明は何が間違っていますか?
すべてのコードは申し訳ありませんが、間違いを見つけ出す必要があると私は見落としています。私はこのサービスのWSDLを数日間設定することに苦労してきました。
ビットを理解するための簡単な例である例では「のxsd:配列」に関係なく、カスタムの定義されたComplexTypeは私を救った!さて、NuSOAPのこの*文書化されていないバグを追いかけてから約1週間後。 – Kingsolmn
私はPHPを使用していません。あなたはそのコードをどこに置いていますか? –