組み込みのPHP
拡張機能 forは、受信リクエストのすべてを の に対して検証しSOAP
ません。基本的なエンティティの存在をチェックしますが、制限のような複雑なものがある場合、拡張機能はそれらの存在をほとんど無視します。SOAP
XML Schema
WSDL
simpleType
に含まれているSOAP
リクエストに対して検証する最良の方法は何ですか?XML Schema
WSDL
ネイティブの PHP5 SOAP ライブラリに加えて、PEAR も Zend SOAP ライブラリも現在メッセージのスキーマ検証を行っていないこともお伝えできます。(残念ながら、それができる PHP SOAP 実装は知りません。)
私なら、XML メッセージをDOMDocumentオブジェクトにロードし、DOMDocument のメソッドを使用してスキーマに対して検証します。
この件について視聴時間について掘り下げてきました。ネイティブ 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 ソリューションです。
通常、WSDL に対して検証しません。WSDL が適切に設計されている場合は、要求の本文を検証するための基になる xml スキーマ (XSD) が必要です。XML パーサーはこれを実行できるはずです。
あとは、Web サービスをどのように実装するか、およびどの SOAP エンジンを使用しているかによって異なります。私はPHPエンジンに直接精通していません。WSDL/インターフェース レベルの「検証」では、通常、次のようなことを行います。
検証を実行する簡単な方法を見つけることができず、最終的にはビジネス ロジックに検証コードが含まれていました。