Saltar al contenido

Cómo usar nuSOAP para mensajes con múltiples espacios de nombres

Ten en cuenta que en la informática un problema casi siempere suele tener diferentes resoluciones, de igual modo nosotros aquí enseñaremos lo más óptimo y mejor.

Solución:

Después de probar con la coincidencia, encontré dos posibles soluciones:

1) No use WSDL para crear nusoap_client y soapval() para crear el mensaje. Esto tiene la desventaja de que el mensaje contiene mucha sobrecarga (el espacio de nombres se define en cada elemento). No muy bien.

2) En lugar de confiar en la coincidencia de parámetros, construya su respuesta en xml y coloque toda la definición de prefijos en el primer elemento, por ejemplo.

$params = "
      
        ..
        ..
      
      ..
    ";

Todavía no es una solución muy buena, pero funciona 🙂

Sobre la base de la publicación de Irwin, creé el xml manualmente y Nusoap hizo el resto. Mi servidor web no tiene la extensión php soap, así que tuve que optar por nusoap, y el servicio web que estoy tratando de consumir requería los espacios de nombres en cada etiqueta (por ejemplo, en el nombre de usuario y la contraseña en mi ejemplo aquí).

require_once('lib/nusoap.php');

$client = new nusoap_client('https://service.somesite.com/ClientService.asmx');
$client->soap_defencoding = 'utf-8';
$client->useHTTPPersistentConnection(); // Uses http 1.1 instead of 1.0
$soapaction = "https://service.somesite.com/GetFoods";

$request_xml = '

  
    
      banjer
      theleftorium
    
  

';

$response = $client->send($request_xml, $soapaction, ''); 

echo '

Request

' . htmlspecialchars($client->request, ENT_QUOTES) . '

';
echo '

Response

' . htmlspecialchars($client->response, ENT_QUOTES) . '

';
echo '

Debug

' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '

';

Entonces tuve un error que decía:

Notice: Undefined property: nusoap_client::$operation in ./lib/nusoap.php  on line 7674

Así que tomé la ruta perezosa y entré en nusoap.php y agregué este código antes de la línea 7674 para hacerlo feliz:

    if(empty($this->operation)) 
        $this->operation = "";
    

Otra forma de evitar este problema sería una modificación de la función nusoap_client::call(). Junto a esta línea (7359 en la versión 1.123) en nusoap.php:

$nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);

Agregué este:

$nsPrefix = $this->wsdl->getPrefixFromNamespace("other_ns_name");

¡Y funcionó! Como solo necesitaba esta biblioteca para un proyecto, estaba bien para mí codificar este truco. De lo contrario, cavaría más y modificaría la función para aceptar array en vez de string para un parámetro de espacio de nombres.

Nos puedes estimular nuestro quehacer fijando un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *