2008-09-19 34 views
8

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

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

Respuesta

2

He estado hurgando 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 se define

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

y se somete

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

obtendrá el php tipo booleano (verdadero)

NuSOAP simplemente arroja Everthing a 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 

Así que la mejor manera es la solución de joelhardi para validar usted mismo o utilizar algún analizador xml como XERCES

1

Normalmente, 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. ¿El mensaje tiene sentido en este contexto y puedo asignarlo a una operación/controlador?
  3. Si es así, iniciar el procesamiento que
  4. lo contrario: error
+0

He editado la pregunta para aclarar. –

-3

Hace algún tiempo he a proof of concept crear un servicio web con PHP usando NuSOAP. No sé si valida la entrada, pero supongo que sí.

4

Además de las librerías nativas de SOAP de PHP5, también puedo decirles 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 utilizar los métodos de DOMDocument para validar el esquema.

-1

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 de negocios.

Cuestiones relacionadas