soapclient ejemplo php soap wsdl xsd

ejemplo - Validar una solicitud SOAP entrante para el WSDL en PHP



soapclient laravel (5)

Por lo general, uno no se valida con el WSDL. Si el WSDL está diseñado correctamente, debe existir un esquema xml subyacente (XSD) para validar el cuerpo de la solicitud. Su analizador XML debería poder hacer esto.

El resto depende de cómo implemente el servicio web y qué motor SOAP está utilizando. No estoy familiarizado directamente con el motor PHP. Para WSDL / nivel de interfaz de "validación" generalmente hago algo como esto:

  1. ¿El cuerpo de la solicitud coincide con un tipo de solicitud conocido y es válido (por XSD)?
  2. ¿Tiene sentido el mensaje en este contexto y puedo asignarlo a una operación / manejador?
  3. Si es así, comience a procesarlo
  4. De lo contrario: error

La extensión PHP incorporada para SOAP no valida todo en la solicitud SOAP entrante contra el XML Schema en el WSDL . Comprueba la existencia de entidades básicas, pero cuando tienes algo complicado como simpleType restricciones de tipo, la extensión prácticamente ignora su existencia.

¿Cuál es la mejor manera de validar la solicitud SOAP contra el XML Schema contenido en el WSDL ?



Además de las librerías nativas PHP5 SOAP, también puedo decirte que ni la PEAR ni las libs Zend SOAP harán la validación de esquema de los mensajes actualmente. (No sé de ninguna implementación de PHP SOAP que, lamentablemente, lo haga)

Lo que haría es cargar el mensaje XML en un objeto DOMDocument y usar los métodos de DOMDocument para validar contra el esquema.


No pude encontrar ninguna forma simple de realizar la validación y al final tuve un código de validación en la lógica comercial.


He estado cavando sobre este asunto a horas de vista. Ni el PHP SoapServer nativo ni la Biblioteca NuSOAP realizan ninguna Validación. PHP SoapServer simplemente hace un molde de tipo. Por ejemplo si defines

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

y enviar

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

Obtendrás el tipo php booleano (verdadero)

NuSOAP simplemente emite todo a la cadena aunque reconoce tipos simples:

desde el registro de depuración nuSOAP:

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

Entonces, la mejor manera es la solución de joelhardi para validar usted mismo o usar algún analizador xml como XERCES