Проверьте входящий SOAP-запрос к WSDL в PHP - PullRequest
10 голосов
/ 20 сентября 2008

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

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

Ответы [ 5 ]

4 голосов
/ 30 сентября 2008

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

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

3 голосов
/ 16 декабря 2011

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

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

и отправьте

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

Вы получите логический тип php (true)

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

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

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

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

2 голосов
/ 20 сентября 2008

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

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

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

Мне не удалось найти какой-либо простой способ выполнить проверку, и в итоге в бизнес-логике имелся код проверки.

0 голосов
/ 21 сентября 2008

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

...