# Consumir servicio web soap

**URL:** <https://foros.velneo.com/t/consumir-servicio-web-soap/9672>\
**Category:** Velneo\
**Created:** [9 Noviembre, 2017 16:43 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672 "2017-11-09T16:43:49Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![celso](https://avatars.discourse-cdn.com/v4/letter/c/74df32/32.png) [@celso](https://foros.velneo.com/u/celso)\
**Post date:** [9 Noviembre, 2017 16:43 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/1 "2017-11-09T16:43:49Z")

</div>

Hola tengo que consumir el siguiente servicio web mediante mensajes soap y no se como hacerlo. el proveedor me da esto:  
Por ejemplo, para la operación EstadoActualVehiculoPorMatricula el mensaje SOAP será de la siguiente forma:  
POST /Servicios/EstadoVehiculo.asmx HTTP/1.1  
Host: www.flotasnet.comg  
Content-Type: text/xml; charset=utf-8  
Content-Length: length  
SOAPAction: “[http://212.8.96.37/webservices/EstadoActualVehiculoPorMatricula](http://212.8.96.37/webservices/EstadoActualVehiculoPorMatricula)”  
\<?xml version=“1.0” encoding=“utf-8”?\>  
\<soap:Envelope xmlns:xsi=“[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)” xmlns:xsd=“[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)” xmlns:soap=“[http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)”\>  
\<soap:Header\>  
\<AuthHeader xmlns=“[http://212.8.96.37/webservices/](http://212.8.96.37/webservices/)”\>  
\<Username\>string\</Username\>  
\<Password\>string\</Password\>  
\</AuthHeader\>  
\</soap:Header\>  
\<soap:Body\>  
\<EstadoActualVehiculoPorMatricula xmlns=“[http://212.8.96.37/webservices/](http://212.8.96.37/webservices/)”\>  
\<empresa\>string\</empresa\>  
\<listaMatriculas\>  
\<string\>string\</string\>  
\<string\>string\</string\>  
\</listaMatriculas\>  
\</EstadoActualVehiculoPorMatricula\>  
\</soap:Body\>  
\</soap:Envelope\>

Desde soporte me dicen que lo haga con la clase XMLHttpRequest, pero llevo dias viendolo y no se por donde empezar

---

<div class="post-metadata">

**Author:** ![huntergps79](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/huntergps79/32/5642_2.png) [@huntergps79](https://foros.velneo.com/u/huntergps79)\
**Post date:** [9 Noviembre, 2017 20:00 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/2 "2017-11-09T20:00:58Z")

</div>

Hola,

dado que clase XMLHttpRequest tiene, digamos sus complicaciones yo hice una pequeña adaptación a como buena parte de las herramientas js manejan el hacer peticiones web:

[https://github.com/Heavyblade/vajax](https://github.com/Heavyblade/vajax)

ahi podrás ver que hay un ejemplo de hacer una petición POST con xml en cuerpo

Un saludo,

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [10 Noviembre, 2017 08:02 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/3 "2017-11-10T08:02:22Z")

</div>

Hola celsoeuro.

Tienes un montón de ejemplos en Internet del uso de XMLHttpRequest, ya que es un componente que existe en prácticamente todos los entornos de programación de alto nivel.

Pon el código que estás usando e intentaremos ayudarte.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![celso](https://avatars.discourse-cdn.com/v4/letter/c/74df32/32.png) [@celso](https://foros.velneo.com/u/celso)\
**Post date:** [16 Noviembre, 2017 12:38 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/4 "2017-11-16T12:38:28Z")

</div>

Hola.  
Gracias a huntersgps y a Paco Satué por sus rápidas respuestas.  
Bueno entre lo que me dijisteis ambos mas la ayuda del administrador del webservice he conseguido armar este proceso que he puesto en un manejador de evento y llamarlo desde un boton.  
importClass(“XMLHttpRequest”);  
function soap() {  
var xmlhttp = new XMLHttpRequest();  
xmlhttp.open(‘POST’, ‘[http://www.flotasnet.com/Servicios/EstadoVehiculo.asmx?op=EstadoActualFlota](http://www.flotasnet.com/Servicios/EstadoVehiculo.asmx?op=EstadoActualFlota)’, true);

```
        // build SOAP request
                
                //Declaracion de variables
                var usuario;
                var pass;
                var empresa;
							
                //Asignacion de variables
                usuario = 'Vigo';
                pass = 'Vigo';
                empresa = 'ero';
	    var matricula = theRoot.varToString("VMATRICULA");
				
					
        var sr =
            '&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://212.8.96.37/webservices/"&gt;'+
                          '&lt;soapenv:Header&gt;'+
                                '&lt;web:AuthHeader&gt;'+
                                    '&lt;web:Username&gt;'+usuario+'&lt;/web:Username&gt;'+
                                    '&lt;web:Password&gt;'+pass+'&lt;/web:Password&gt;'+
                                    '&lt;web:Empresa&gt;'+empresa+'&lt;/web:Empresa&gt;'+
                                '&lt;/web:AuthHeader&gt;'+
                          '&lt;/soapenv:Header&gt;'+
						  
							'&lt;soapenv:Body&gt;'+
                                '&lt;web:EstadoActualVehiculoPorMatricula&gt;'+
                                    '&lt;web:empresa&gt;'+empresa + '&lt;/web:empresa&gt;'+
				' &lt;web:listaMatriculas&gt; ' +
					' &lt;!--Zero or more repetitions:--&gt;' +
					' &lt;web:string&gt;' + matricula + '&lt;/web:string&gt;'+
   					' &lt;/web:listaMatriculas&gt; ' +
                                '&lt;/web:EstadoActualVehiculoPorMatricula&gt;'+
                          '&lt;/soapenv:Body&gt;'+
				'&lt;/soapenv:Envelope&gt;';

        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4) {
                if (xmlhttp.status == 200) {
                   // Respuesta a la peticion
                       alert(xmlhttp.response);
                }
            }
        }
        // Send the POST request
        xmlhttp.setRequestHeader('Content-Type', 'text/xml');
        xmlhttp.send(sr);
    respuesta =xmlhttp.response
        // send request

        // ...
    }

```

Ya no me da ningun problema cuando lo ejecuto, Pero tampoco me devuelve nada en respuesta. Veis algún fallo?

---

<div class="post-metadata">

**Author:** ![cristianvg2003](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/cristianvg2003/32/5239_2.png) [@cristianvg2003](https://foros.velneo.com/u/cristianvg2003)\
**Post date:** [16 Noviembre, 2017 17:15 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/5 "2017-11-16T17:15:38Z")

</div>

Buenas,

Ahora que tomo tu codigo y lo pego en un editor las commillas que estas usando me aparecen backtick en lugar de comillas simples, no sé si sea solo tema de copiar-pegar o realmente tienes el codigo asi, la herramienta que valida los scripts te dice que el script esta correcto ?

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [16 Noviembre, 2017 18:28 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/6 "2017-11-16T18:28:12Z")

</div>

Hola Cristian.

No te fies del copia y pega desde la página del foro, siempre hay problemas con comilas dobles o simples.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![alfabeta](https://avatars.discourse-cdn.com/v4/letter/a/cab0a1/32.png) [@alfabeta](https://foros.velneo.com/u/alfabeta)\
**Post date:** [19 Noviembre, 2017 01:06 UTC](https://foros.velneo.com/t/consumir-servicio-web-soap/9672/7 "2017-11-19T01:06:00Z")

</div>

Te coloco un código funcional, que preguntando a Soporte más me demoré en encontrar respuestas, que buscando en la web, este código está ubicado en un manejador de evento. Y el archivo adjunto es en una herramienta SoapUI que puedes colocar la url de consulta que debe entregarte el proveedor, con esto la herramienta te presenta la cabecera y el cuerpo a enviar como parámetro con XMLHttpRequest.  
Nota: La recuperación de fechas tuve problemas pero eso es en Velneo no mas.

Espero te sirva.

importClass(“XMLHttpRequest”);  
// Para usar las funciones de la clase VFile primero hay que importarla  
importClass( “VTextFile” );  
importClass( “VFile” );

// Se declara el objeto fichero  
var fi = new VTextFile( “C:/TextFile.txt” );

var url=‘[http://agendamiento.hospitalariasec.org/consultaragenda.aspx?WSDL](http://agendamiento.hospitalariasec.org/consultaragenda.aspx?WSDL)’;  
var xhr = new XMLHttpRequest();

xhr.open(“POST”, url, true);  
xhr.setRequestHeader(‘Content-Type’, ‘text/xml’);  
//Recupera varibles de fechas  
var formulario = theRoot.dataView(),  
var fechaDesde = theRoot.varToString(“FCH\_DES”),  
var fechaHasta = theRoot.varToString(“FCH\_HAS”);  
// build SOAP request  
var sr = ‘\<soapenv:Envelope xmlns:soapenv=“[http://schemas.xmlsoap.org/soap/envelope/](http://schemas.xmlsoap.org/soap/envelope/)” xmlns:agen=“Agenda”\>’+  
‘\<soapenv:Header/\>’ +  
‘\<soapenv:Body\>’ +  
‘\<agen:ConsultarAgenda.Execute\>’ +  
‘\<agen:Desdefecha\>’ + fechaDesde + ‘\</agen:Desdefecha\>’ +  
‘\<agen:Hastafecha\>’+ fechaHasta + ‘\</agen:Hastafecha\>’ +  
‘\</agen:ConsultarAgenda.Execute\>’ +  
‘\</soapenv:Body\>’ +  
‘\</soapenv:Envelope\>’ ;

alert(sr)  
xhr.send(sr);

// Al ser una llamada asíncrona, esperamos a que la petición termine  
while(xhr.readyState != 4) { // 4: Done  
xhr.processEvents();  
}

if ( (xhr.errorCode==0) && (xhr.status == 200) ) {  
alert((xhr.response));  
// Se abre el fichero en modo escritura. Crea si no existe o limpia si existe  
if ( fi.open( VFile.OpenModeWriteOnly | VFile.OpenModeTruncate) )  
{  
// Se llena el buffer con las 26 letras del abecedario  
fi.write(xhr.response);

```
	// Se cierra el fichero
	fi.close();
}
else
	// Si no ha sido posible abrir el fichero se muestra error
	alert( "No se pudo abrir el fichero " + fi.fileName() + ", error " + fi.error(), "Error" );

```

}

Ecuador Quality Systems  
Quito - Ecuador  
Ricardo G.

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/f/f68df855babdc087dc020f9fbeacf47599d36b9c.png)
