在PHP中验证对WSDL的传入SOAP请求
时间:2020-03-06 14:28:14 来源:igfitidea点击:
SOAP的内置PHP扩展未根据WSDL中的XML Schema验证传入的SOAP请求中的所有内容。它确实检查基本实体的存在,但是当我们遇到诸如simpleType
限制之类的复杂事物时,扩展名几乎会忽略它们的存在。
针对WSDL中包含的XML Schema验证SOAP请求的最佳方法是什么?
解决方案
通常,不会针对WSDL进行验证。如果WSDL设计合理,则应该有一个基础xml模式(XSD)来验证请求的主体。XML解析器应该能够做到这一点。
其余部分取决于我们如何实现Web服务以及所使用的SOAP引擎。我并不直接熟悉PHP引擎。对于WSDL /接口级别的"验证",我通常这样做:
- 请求的主体是否与已知的请求类型匹配,并且是否有效(通过XSD)?
- 该消息在这种情况下是否有意义,我可以将其映射到操作/处理程序吗?
- 如果是这样,请开始处理
- 否则:错误
前一段时间,我使用NuSOAP使用PHP创建了概念证明Web服务。我不知道它是否验证输入,但我认为它可以。
除了本机PHP5 SOAP库之外,我还可以告诉我们,PEAR和Zend SOAP库目前都不会对消息进行模式验证。 (不幸的是,我不知道有任何PHP SOAP实现。)
我要做的是将XML消息加载到DOMDocument对象中,并使用DOMDocument的方法针对架构进行验证。
我找不到任何简单的方法来执行验证,最后在业务逻辑中有验证代码。