ホームページ  >  記事  >  バックエンド開発  >  JAVA WebService_PHP チュートリアルを呼び出すときに PHP5 が遭遇するさまざまな問題の解決策

JAVA WebService_PHP チュートリアルを呼び出すときに PHP5 が遭遇するさまざまな問題の解決策

WBOY
WBOYオリジナル
2016-07-22 09:02:47782ブラウズ

ガンクを開始します。

サーバー:

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: 20032012-12-04 15:57:46.124ロジックエラー< ;/msg>sfn004.cn:瀵游笧卓Feng纴姝流璖嵝€廃彽奇$刺繍绔欌€濋獙癇佹湇锷$diXuanfeng鍦ㄥ镙畐統Adze屼謉鑳借囀娆℃开鍐粋璒zhjx922.com:瀵游第卓璒纴姝ゅやん钖嵝€仃彰equi$刺繍绔欌€濋獙璇璇锷$ dixuanfeng createSealResponse> --uuid:0c37c356-41de-4361-9835-ab8dc023dcac--
明らかに 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,''); $response_string=substr($response,$start,$end-$start+1); 戻り値($response_string)
}
}



http://www.bkjia.com/PHPjc/37186​​3.html

www.bkjia.com

http://www.bkjia.com/PHPjc/37186​​3.html技術記事ガンクを開始します。 サーバー: Spring3.0.5+CXF2.4、JDK1.6 wsdl ファイルは自動的に生成されるはずです。サーバーはクライアントではありません: PHP5.1.3 最初の問題が発生しました: SOAP-ERROR: Enco...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。