Вопрос

Встроенный PHP расширение для SOAP не проверяет все во входящем SOAP запрос в отношении XML Schema в WSDL.Он проверяет наличие базовых сущностей, но когда у вас есть что-то сложное, например simpleType ограничения расширение в значительной степени игнорирует их существование.

Каков наилучший способ проверки SOAP запрос против XML Schema содержащийся в WSDL?

Это было полезно?

Решение

Копался в этом вопросе несколько часов.Ни собственный PHP SoapServer, ни библиотека NuSOAP не выполняют никакой проверки.PHP SoapServer просто выполняет приведение типа.Например, если вы определяете

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

и подчиниться

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

вы получите php-тип boolean (true)

NuSOAP просто преобразует все в string, хотя и распознает простые типы:

из журнала отладки NuSOAP:

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

Итак, лучший способ - это решение joelhardi для самостоятельной проверки или использования какого-нибудь анализатора xml, такого как XERCES

Другие советы

Помимо собственных библиотек SOAP PHP5, я также могу сказать вам, что ни библиотеки PEAR, ни Zend SOAP в настоящее время не будут выполнять проверку схемы сообщений.(К сожалению, я не знаю ни одной реализации PHP SOAP, которая это делала бы.)

Что я бы сделал, так это загрузил XML-сообщение в DOMDocument ДОМДокумент возразите и используйте методы DOMDocument для проверки на соответствие схеме.

Обычно никто не проверяет соответствие WSDL.Если WSDL разработан должным образом, должна существовать базовая xml-схема (XSD) для проверки тела запроса на соответствие.Ваш анализатор XML должен уметь это делать.

Остальное зависит от того, как вы реализуете веб-сервис и какой движок SOAP вы используете.Я непосредственно не знаком с движком PHP.Для "проверки" уровня WSDL / интерфейса я обычно делаю что-то вроде этого:

  1. Соответствует ли тело запроса известному типу запроса и является ли оно действительным (по XSD)?
  2. Имеет ли сообщение смысл в этом контексте и могу ли я сопоставить его с операцией / обработчиком?
  3. Если это так, начните обрабатывать его
  4. В противном случае:ошибка

Я не смог найти никакого простого способа выполнить проверку и в конце концов получил код проверки в бизнес-логике.

Некоторое время назад я создал доказательство концепции веб-сервис с использованием PHP NuSOAP ( НуСОАП ).Я не знаю, проверяет ли это входные данные, но я бы предположил, что это так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top