ガンクを開始します。
サーバー:
Spring3.0.5+CXF2.4、JDK1.6
自動的に生成された wsdl ファイル「であるはずです」<サーバーは私たちのものではありません>
クライアント:
PHP5.1.3
私が最初に遭遇した質問:
SOAP-ERROR: エンコーディング: オブジェクトに「id」プロパティがありません
ただし、API ドキュメントには ID は必要ないと記載されているため、wsdl ファイルの内容を確認してください
スキーマドキュメントを確認し、次の内容を見つけます:
スキーマを通じて、maxOccurs 属性と minOccurs 属性を使用して、要素が出現する回数を定義できます。 maxOccurs は要素の最大出現数を定義し、minOccurs は要素の最小出現数を定義します。 maxOccurs と minOccurs のデフォルト値は両方とも 1 です。 (わかりました、これはサーバー側の問題ですか?その後、値を書き込んだだけで合格しました...)
PS: 真ん中に小さなリンクがあります。PHP のソースコードを参照してください。 。 。
SOAPのphp_encoding.cの関数model_to_xml_object
static int model_to_xml_object(xmlNodePtr ノード、sdlContentModelPtr モデル、zval *object、int スタイル、int strict TSRMLS_DC)
//小さなコード
} else if (model->min_occurs == 0) {
2 を返します。
} その他 {
if (厳密) {
soap_error1(E_ERROR, "エンコーディング: オブジェクトに '%s' プロパティがありません", model->u.element->name);//明らかに
}
0 を返します。
}
ここからmin_occursで問題が発生していることが分かりましたので、上記の問題を解決しました(相手があまり標準化されていないのでしょうか?)
2 番目の質問:
XML ドキュメントがないようです
データが返ってきたので、パケットをキャプチャしたところ(データを直接表示する方法があるようです)、返されたデータは次のような形式であることがわかりました。
HTTP/1.1 200 OK
サーバー: Apache-Coyote/1.1
コンテンツタイプ: multipart/popular; type="application/xop+xml"; uuid:0c37c356-41de-4361-9835-ab8dc023dcac"; ; 開始情報 = "テキスト/xml"
コンテンツの長さ: 790
日付: 2012 年 12 月 4 日火曜日 07:57:45 GMT
--uuid:0c37c356-41de-4361-9835-ab8dc023dcac
コンテンツタイプ: アプリケーション/xop+xml; タイプ = "テキスト/xml";
コンテンツ転送エンコーディング: バイナリ
コンテンツ ID: 2003
明らかに XML ではありません。 。つまり、PHP ボスがエラーを報告しました
相手に聞いてみると答えはこうです
CXF は次のアップロード属性を設定します。重要な点は、PHP SOAP 拡張機能がデフォルトでこれをサポートしていないことです。
baidu、Google は WSO2 WSF FOR PHP 拡張機能を通じて実装できます。気にせず探し続けてください。 。 。
公式ドキュメントを読む
http://cn2.php.net/soap
/**
* SoapClient クラスを継承し、__doRequest メソッドをオーバーライドします
* @著者 zhjx922
*/
クラス ZSoapClient は SoapClient を拡張します
{
パブリック関数 __doRequest($request, $location, $action, $version, $one_way = 0)
{
$response =parent::__doRequest($request, $location, $action, $version, $one_way);
//実際の状況に応じて処理します。 。 。
$start=strpos($response,'
}
}
www.bkjia.com