12

組み込みのPHP拡張機能 forは、受信リクエストのすべてを の に対して検証しSOAPません。基本的なエンティティの存在をチェックしますが、制限のような複雑なものがある場合、拡張機能はそれらの存在をほとんど無視します。SOAPXML SchemaWSDLsimpleType

に含まれているSOAPリクエストに対して検証する最良の方法は何ですか?XML SchemaWSDL

4

6 に答える 6

4

ネイティブの PHP5 SOAP ライブラリに加えて、PEAR も Zend SOAP ライブラリも現在メッセージのスキーマ検証を行っていないこともお伝えできます。(残念ながら、それができる PHP SOAP 実装は知りません。)

私なら、XML メッセージをDOMDocumentオブジェクトにロードし、DOMDocument のメソッドを使用してスキーマに対して検証します。

于 2008-09-30T08:53:22.520 に答える
3

この件について視聴時間について掘り下げてきました。ネイティブ PHP SoapServer も NuSOAP ライブラリも検証を行いません。PHP SoapServer は単純に型キャストを行います。たとえば、定義した場合

<xsd:element name="SomeParameter" type="xsd:boolean" />

そして提出する

<get:SomeParameter>dfgdfg</get:SomeParameter>

php Type boolean (true) を取得します

NuSOAP は単純な型を認識しますが、単純にすべてを文字列にキャストします。

nuSOAP デバッグ ログから:

nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean

したがって、最善の方法は、自分自身を検証するか、XERCES などの xml パーサーを使用する joelhardi ソリューションです。

于 2011-12-16T09:55:50.490 に答える
2

通常、WSDL に対して検証しません。WSDL が適切に設計されている場合は、要求の本文を検証するための基になる xml スキーマ (XSD) が必要です。XML パーサーはこれを実行できるはずです。

あとは、Web サービスをどのように実装するか、およびどの SOAP エンジンを使用しているかによって異なります。私はPHPエンジンに直接精通していません。WSDL/インターフェース レベルの「検証」では、通常、次のようなことを行います。

  1. リクエストの本文は既知のリクエスト タイプと一致しており、有効ですか (XSD による)?
  2. メッセージはこのコンテキストで意味があり、操作/ハンドラーにマップできますか?
  3. その場合は、処理を開始してください
  4. それ以外: エラー
于 2008-09-20T15:43:06.687 に答える
-1

検証を実行する簡単な方法を見つけることができず、最終的にはビジネス ロジックに検証コードが含まれていました。

于 2009-02-16T21:42:02.970 に答える
-3

少し前に、 NuSOAPを使用して PHP で Web サービスの概念実証を作成しました。入力が検証されるかどうかはわかりませんが、検証されると思います。

于 2008-09-21T07:03:29.453 に答える