Проверить входящий запрос SOAP к WSDL в PHP

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
11
0
10 736
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

и представить

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

вы получите логическое значение php Type (true)

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

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

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

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

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