Consumiendo WebService SOAP desde javascript

  • Autor Autor lokinkc
  • Fecha de inicio Fecha de inicio
L

lokinkc

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas, estoy intentando consumir un Webservice hecho en java desde un cliente JavaScript.
Consigo, desde el cliente, acceder al jsp del webservice, pero no a ninguno de sus metodos.
No he hecho esto nunca, y no se si lo estoy haciendo bien o si se puede hacer siquiera lo que yo quiero.

Dejo aquí mi código para ver si alguien me puede ayudar.


Codigo:

Insertar CODE, HTML o PHP:
<html>

<script type="text/javascript">
	
    function run(){

        var objXMLHttpRequest = new XMLHttpRequest();
        objXMLHttpRequest.open("GET", "http://localhost:8080/CrunchifyWS/services/CrunchifyHelloWorld?wdsl/getText", true);
        objXMLHttpRequest.onreadystatechange = function () {
       	//alert(objXMLHttpRequest.readyState+"   "+ objXMLHttpRequest.status);
        if (objXMLHttpRequest.readyState == 4 && objXMLHttpRequest.status == 200) {
            result = objXMLHttpRequest.responseXML;
            alert(objXMLHttpRequest.responseText);
          }
        }
        objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

        var packet = '<?xml version="1.0" encoding="utf-8" ?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><PieTable xmlns="[getText(Namespace = "http://service.web.com.crunchify")]"><table>Pie</table></PieTable></soap:Body></soap:Envelope>';

        objXMLHttpRequest.send(packet);
        // Add mentioned below code only if your application calls webservice synchronously. Otherwise use "onreadystatechange" process response.
        response = objXMLHttpRequest.responseXML;
        alert(objXMLHttpRequest.responseText+ "  "+ response);
    }
</script>

<head>
</head>
<body>
	<button  onclick="run()">Dale!</button>
</body>
</html>
Muchas gracias de antemano. Estoy seguro de que lo estoy haciendo mal. Pero no se muy bien por qué.
 
Si te refieres a ponerlo en el navegador, el resultado es exactamente el mismo que si buscamos http://localhost:8080/CrunchifyWS/services/CrunchifyHelloWorld?wdsl.

El webService lo he probado desde el WSClient que genera Eclipse, y funcionan los métodos. Para asegurarnos de que todo funcional correctamente.
Creo que el fallo debe estar en la forma en la que realizo la petición.

Realmente nunca antes había trabajado con WebServices, ni mucho menos había intentado crear un cliente SOAP en JS.

Estoy muy muy perdido.😕

- - - Actualizado - - -

Este es el wdsl del webservice.
Insertar CODE, HTML o PHP:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.web.com.crunchify" xmlns:intf="http://service.web.com.crunchify" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://service.web.com.crunchify">
<!--
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)
-->
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://service.web.com.crunchify">
<element name="addValue">
<complexType>
<sequence>
<element name="value" type="xsd:float"/>
</sequence>
</complexType>
</element>
<element name="addValueResponse">
<complexType>
<sequence>
<element name="addValueReturn" type="xsd:float"/>
</sequence>
</complexType>
</element>
<element name="subtractValue">
<complexType>
<sequence>
<element name="value" type="xsd:float"/>
</sequence>
</complexType>
</element>
<element name="subtractValueResponse">
<complexType>
<sequence>
<element name="subtractValueReturn" type="xsd:float"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="subtractValueRequest">
<wsdl:part element="impl:subtractValue" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="subtractValueResponse">
<wsdl:part element="impl:subtractValueResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="addValueRequest">
<wsdl:part element="impl:addValue" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="addValueResponse">
<wsdl:part element="impl:addValueResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="CrunchifyHelloWorld">
<wsdl:operation name="addValue">
<wsdl:input message="impl:addValueRequest" name="addValueRequest"></wsdl:input>
<wsdl:output message="impl:addValueResponse" name="addValueResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="subtractValue">
<wsdl:input message="impl:subtractValueRequest" name="subtractValueRequest"></wsdl:input>
<wsdl:output message="impl:subtractValueResponse" name="subtractValueResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CrunchifyHelloWorldSoapBinding" type="impl:CrunchifyHelloWorld">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addValue">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="addValueRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addValueResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="subtractValue">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="subtractValueRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="subtractValueResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CrunchifyHelloWorldService">
<wsdl:port binding="impl:CrunchifyHelloWorldSoapBinding" name="CrunchifyHelloWorld">
<wsdlsoap:address location="http://localhost:8080/CrunchifyWS/services/CrunchifyHelloWorld"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Estoy seguro de que el error está en la forma de hacer la llamada desde el cliente. Ayuda por favor
 
Atrás
Arriba