原文: http://www.cnblogs.com/Jaypei/archive/2009/04/09/1432521.html
前回、nuSOAP を使用してオブジェクトを転送することに成功しましたが、実際の運用では別の要件が存在することがよくあります。プロセスはリモートでオブジェクトの配列を返します。午後 1 日かかってようやくテストが成功したので、みんなと共有するのが待ちきれません:)
準備
まずクラス UserInfo を定義します:
class UserInfo {
var $UserName;
//... var $Sequence;
}
次に、リモートメソッドのテスト:
関数 hello() {
一般的な nuSOAP プログラムは次のとおりです: (プロセス全体はその変更です)
$soap =newsoap_server() ;
$soap->wsdl->addComplexType(
) 'complexType',
「 配列 ( ) 'ユーザー名
'=>配列('名前
'=> , '
タイプ' =>'
xsd:string'
), '=>配列( ' 名前'= >'シーケンス','type' =>'xsd:int ') ); ', array(),array('return'=>'tns:UserInfo'));
リストを返したい場合は、戻り時に型を変更する必要があります。最初に、次のように、string や int などの基本型を返すリスト メソッドを見つけました: $soap->register('hello', array(), array('return'=>'SOAP-ENC:配列') );
このメソッドがカスタム複合型で使用される場合、型は次のようになります: xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="object[2]"object is not What私たちが望んでいます。そこで、オンラインで関連情報を検索したところ、次のメソッドを見つけました: $soap->register('hello', array(), array('return'=>'tns:UserInfoArray') );ここでカスタマイズする必要があります。次のように tns:UserInfoArray の配列タイプを定義して追加します。 ' UserInfoArray' , 、 ' SOAP-ENC:Array',
array
(),
)
、
'
'
); この時点でコード部分は完了しましたが、nuSOAP は呼び出し時にエラーを報告しました:
キャッチ可能な致命的なエラー:クラス UserInfo のオブジェクトを ...nusoapnusoap.php の行 6002 で文字列に変換できませんでしたそこで、nusoap.php の行 6002 を見つけて、UserInfo が文字列に変換される理由を確認してください:
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");コードのほとんどを読みませんでしたが、明らかに単なるデバッグ コードであり、実用的な効果はありません。したがって、それをコメントアウトして呼び出しを続けてください。OK!合格し、すべてがうまくいきました。
注: このエラーが、私の使用方法が本来の設計に反しているためなのか、nuSOAP 自体のバグによるものなのかはわかりません。いくつかのアプリケーションを繰り返しリストし、問題がなければ成功とみなされます。間違いがありましたので修正してください。
以上、nusoap で渡されるオブジェクト配列を内容も含めて紹介しましたが、PHP チュートリアルに興味のある方の参考になれば幸いです。