SOAP
的內置PHP
擴展不會驗證傳入的SOAP
請求中的所有內容,而不是驗證WSDL
中的XML Schema
。它確實檢查是否存在基本實體,但是當你遇到像simpleType
限制那樣複雜的事情時,擴展名會忽略它們的存在。在PHP中驗證到WSDL的傳入SOAP請求
驗證SOAP
請求的最佳方法是什麼?WSDL
中包含XML Schema
?
SOAP
的內置PHP
擴展不會驗證傳入的SOAP
請求中的所有內容,而不是驗證WSDL
中的XML Schema
。它確實檢查是否存在基本實體,但是當你遇到像simpleType
限制那樣複雜的事情時,擴展名會忽略它們的存在。在PHP中驗證到WSDL的傳入SOAP請求
驗證SOAP
請求的最佳方法是什麼?WSDL
中包含XML Schema
?
在這個問題上一直在挖掘幾個小時。 原生的PHP SoapServer不需要NuSOAP庫就可以進行任何驗證。 PHP SoapServer只是進行類型轉換。 因爲如果你定義
<xsd:element name="SomeParameter" type="xsd:boolean" />
,並提交實例
<get:SomeParameter>dfgdfg</get:SomeParameter>
你會得到PHP類型布爾(真)
的NuSOAP只是蒙上寄託都串,儘管它承認簡單類型:
來自nuSOAP調試日誌的:
nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean
所以最好的方法是joelhardi解決方案來驗證自己或使用一些XML解析器像XERCES
通常,不會針對WSDL進行驗證。如果WSDL設計正確,那麼應該有一個基礎xml模式(XSD)來驗證請求的主體。你的XML解析器應該能夠做到這一點。
剩下的事情取決於您如何實現Web服務以及您正在使用的SOAP引擎。我不直接熟悉PHP引擎。對於WSDL /接口級別的「驗證」,我通常會這樣做:
前段時間我已經創建使用NuSOAP PHP a proof of concept Web服務。我不知道它是否驗證輸入,但我會假設它。
除了原生的PHP5 SOAP庫之外,我還可以告訴你,PEAR和Zend SOAP庫都不會對目前的消息進行模式驗證。 (不幸的是,我不知道有任何PHP SOAP實現)
我會做的是將XML消息加載到DOMDocument對象中,並使用DOMDocument的方法對模式進行驗證。
我無法找到任何簡單的方法來執行驗證,並最終在業務邏輯中有驗證碼。
我編輯了問題澄清。 – 2008-09-22 15:43:12