Tengo dificultades para realizar con éxito una llamada de servicio web a un servicio web SOAP desde una página web. El servicio web es un servicio web Java que utiliza JAX-WS.Llamadas al servicio web SOAP desde Javascript
Aquí es el método web que estoy tratando de llamar:
@WebMethod
public String sayHi(@WebParam(name="name") String name)
{
System.out.println("Hello "+name+"!");
return "Hello "+name+"!";
}
He intentado hacer la llamada de servicio web utilizando la biblioteca jQuery jqSOAPClient (http://plugins.jquery.com/project/jqSOAPClient).
Este es el código que he utilizado:
var processResponse = function(respObj)
{
alert("Response received: "+respObj);
};
SOAPClient.Proxy = url;
var body = new SOAPObject("sayHi");
body.ns = ns;
body.appendChild(new SOAPObject("name").val("Bernhard"));
var sr = new SOAPRequest(ns+"sayHi",body);
SOAPClient.SendRequest(sr,processResponse);
Sin respuesta parece estar regresando. Cuando estoy en jqSOAPClient.js
, registro el miembro de datos xData.responseXML
que obtengo 'indefinido'. En el servicio web veo la advertencia
24 Mar 2011 10:49:51 AM com.sun.xml.ws.transport.http.server.WSHttpHandler handleExchange ADVERTENCIA: no puede manejar método HTTP: OPCIONES
También he intentado utilizar una biblioteca javascript, soapclient.js (http://www.codeproject.com/kb/Ajax/JavaScriptSOAPClient.aspx). El código del lado del cliente que uso aquí es
var processResponse = function(respObj)
{
alert("Response received: "+respObj);
};
var paramaters = new SOAPClientParameters();
paramaters.add("name","Bernhard");
SOAPClient.invoke(url,"sayHi",paramaters,true,processResponse);
He bypassed en la parte soapclient.js que obtiene el WSDL, ya que no funciona (me sale un: IOException: An established connection was aborted by the software in your host machine
en el lado servicio web) . El WSDL solo se recupera para el espacio de nombre apropiado para usar, por lo que acabo de reemplazar la variable ns con el espacio de nombre real.
Recibo exactamente la misma advertencia en el servicio web que antes (no puedo manejar el método HTTP: OPCIONES) y en la consola de error del navegador aparece el error "el documento es nulo". Cuando registro el valor de req.responseXML en soapclient.js, veo que es nulo.
¿Alguien podría aconsejarme sobre qué podría estar yendo mal y qué debería hacer para que esto funcione?
Cuando despliego el servicio web a Glassfish, el cliente recibe las mismas respuestas ("indefinido" en el caso de jqSOAPClient.js y nulo cuando usa soapclient.js). – bgh