Tras el artículo anterior dónde explicaba cómo leer las cabeceras en una respuesta SOAP, he descubierto cómo hacer funcionar el método estándar, seguro que a más de uno le viene bien saberlo.
El problema era que con __soapCall no había manera de que me funcionase la llamada, independientemente de recibir las cabeceras de la respuesta. Ahora sé porqué. El webservice al que estaba llamando está hecho en .NET y parece ser que hay que llamarlo de distinta forma que si se hace invocando al método directamente 😐 .
Si lo llamamos directamente hacemos:
$result = $client->TuMetodo($parametros);
Si lo llamamos con __soapCall haremos:
$result = $client->__soapCall("TuMetodo", array("parameters"=>$parametros), NULL, $reqheaders, $resheaders);
¿Veis la diferencia?
De la segunda forma hay que pasar los parámetros de entrada del método cómo un sólo parámetro “parameters“, es decir, el mismo array que teníamos con la primera manera pero asignándolo a “parameters“.
Eso es todo. Ahora ya funciona y podemos recoger automáticamente los headers de la respuesta SOAP.
Sigo sin saber porqué de esta manera se tiene acceso a las cabeceras y con la invocación directa (la forma recomendada) no. Por el momento voy a seguir utilizando el desarrollo que hice en el primer artículo, la invocación directa me parece más elegante y ya que había conseguido recuperar las cabeceras, ¿por qué cambiarlo ahora? 😛 .
Bueno es saberlo 🙂
No será la primera ni última vez que encontraremos particularidades en la parte servidora que fuercen a cambiar nuestros desarrollos saliendo de las operativas estándar.
Con clientes Axis2 en Java atacando a servicios implementados en WebSphere o .NET también se deben considerar algunas particularidades (sobre todo en el transporte), por eso te comentaba en el artículo anterior que si el estándar falla en el cliente… el culpable suele ser el servidor.
Gracias.
Un saludo.
tengo el mismo problema, no se si me pueden apoyar con este tema
el wsdl = https://omcserver1.ohmycard.com/OMCCorpTest/OMC.Corp.svc?Wsdl
user:PCorpUP
pass:PC0rpUsr1
antemano gracias
Hola soy principianprincipiante en íntegracion con soa, y cree uno con java pero se me hace imposible consumirlo por queque estoy pasando un objeto y no parámetro por parametro , por ello me lanza una excepcion NullPointer.. Hay alguna forma de solucionar este tipo de error.