Validar la entrada de una solicitud SOAP WSDL en PHP
Pregunta
El built-in PHP
extensión para SOAP
no validar todo en los entrantes SOAP
petición en contra de la XML Schema
en el WSDL
.Se comprueba la existencia de entidades básicas, pero cuando tienes algo complicado como simpleType
las restricciones de la extensión bastante ignora su existencia.
¿Cuál es la mejor manera de validar la SOAP
petición contra XML Schema
contenida en el WSDL
?
Solución
Estado cavando alrededor de este asunto, ver horas.Ni los nativos de PHP SoapServer nore la Librería NuSOAP ninguna Validación.PHP SoapServer simplemente hace una conversión de tipo.Por Ejemplo, si se define
<xsd:element name="SomeParameter" type="xsd:boolean" />
y presentar
<get:SomeParameter>dfgdfg</get:SomeParameter>
usted obtendrá el php de Tipo boolean (true)
NuSOAP simplemente arroja todo a la cadena aunque reconoce los tipos simples:
desde el nuSOAP de registro de depuración:
nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean
Así que la mejor manera es joelhardi solución para validar usted mismo o utilizar algunos Analizador xml como XERCES
Otros consejos
Además de la nativa PHP5 SOAP libs, yo también puedo decir que ni la PERA ni Zend JABÓN libs hará la validación de esquema de mensajes en la actualidad.(No sé de PHP SOAP aplicación que hace, por desgracia.)
Lo que me gustaría hacer es cargar el mensaje XML en un DOMDocument objeto y uso DOMDocument métodos para validar el esquema.
Normalmente uno no validar contra el WSDL.Si el WSDL es diseñado correctamente, debe ser la base de los esquemas xml (XSD) para validar el cuerpo de la solicitud.Su analizador de XML debe ser capaz de hacer esto.
El resto depende de cómo implementar el servicio web y que el JABÓN motor está utilizando.Yo no soy de conocer directamente con el motor de PHP.Para WSDL/nivel de interfaz de "validación" yo suelo hacer algo parecido a esto:
- ¿El cuerpo de la solicitud coincida con un conocido tipo de solicitud y es válida (por XSD)?
- ¿El mensaje de sentido en este contexto y puedo asignar a una operación/controlador?
- Si es así, iniciar el procesamiento se
- De otra manera:error
Yo no era capaz de encontrar alguna forma más sencilla para realizar la validación y en la final tuvo código de validación en la lógica de negocio.
Hace algún tiempo he de crear una prueba de concepto servicio web con PHP usando NuSOAP.No sé si es valida la entrada, pero supongo que sí.