1

I try to access from a browser a simple mailing list service I developed. I adapted a working example I found but I don't know why the request doesn't seem to reach the service and so no response is returned.

Using a SOAP envelope is a requirement, I need to know what is possibly wrong with this code, not how I could do the same thing using other techniques. (The service is deployed correctly on a GlassFish server and I have a working Java client to test it, so no problem with the service)

Does anyone see something bad (I'm joining the WSDL too, if you need any other detail don't hesitate)? Thanks!

<html>
<head>
    <title>Soap Invocation</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <script type="text/javascript">

        var request = null;

        function createRequest() {
            if (window.XMLHttpRequest){
                request=new XMLHttpRequest();
            }
            else{
                if (new ActiveXObject("Microsoft.XMLHTTP")) {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                } else {
                    request = new ActiveXObject("Msxml2.XMLHTTP");
                }
            } 
        }

        function getMail() {
            createRequest();
            var envelope = "<?xml version='1.0' encoding='UTF-8'?>";
            envelope += "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
            envelope += "<soap:Header/>";
            envelope += "<soap:Body>";
            envelope += "<ns2:getMails xmlns:ns2='http://service.inf4375.com/'>";
            envelope += "</ns2:getMails>";
            envelope += "</soap:Body>";
            envelope += "</soap:Envelope>";

            var url = "http://127.0.0.1:8080/SoapService/MailingService";

            request.onreadystatechange = updatePage;

            request.open("GET", url, false);
            request.setRequestHeader("Content-Type", "text/html");
            request.setRequestHeader("SOAPAction", "");
            request.send(envelope);
        }

        function updatePage() {

            if(request.readyState == 4) {
                document.getElementById("get").innerHTML = "<p>" + request.responseXML.selectSingleNode("//return").text + "</p>";
            } else {
                document.getElementById("get").innerHTML = "Loading..."
            }

        }
    </script>
</head>
<body>
    <input type="button" value="GetMail" onclick="getMail();" />
    <span id="get"></span>       
</body>
</html>

The WSDL :

<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.inf4375.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.inf4375.com/" name="MailingService">
<types>
    <xsd:schema>
        <xsd:import namespace="http://service.inf4375.com/" schemaLocation="http://localhost:8080/SoapService/MailingService?xsd=1"/>
    </xsd:schema>
</types>
<message name="getMails">
    <part name="parameters" element="tns:getMails"/>
</message>
<message name="getMailsResponse">
    <part name="parameters" element="tns:getMailsResponse"/>
</message>
<message name="addMail">
    <part name="parameters" element="tns:addMail"/>
</message>
<message name="addMailResponse">
    <part name="parameters" element="tns:addMailResponse"/>
</message>
<portType name="Mailing">
    <operation name="getMails">
        <input wsam:Action="http://service.inf4375.com/Mailing/getMailsRequest" message="tns:getMails"/>
        <output wsam:Action="http://service.inf4375.com/Mailing/getMailsResponse" message="tns:getMailsResponse"/>
    </operation>
    <operation name="addMail">
        <input wsam:Action="http://service.inf4375.com/Mailing/addMailRequest" message="tns:addMail"/>
        <output wsam:Action="http://service.inf4375.com/Mailing/addMailResponse" message="tns:addMailResponse"/>
    </operation>
</portType>
<binding name="MailingPortBinding" type="tns:Mailing">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getMails">
        <soap:operation soapAction=""/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
    <operation name="addMail">
        <soap:operation soapAction=""/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
</binding>
<service name="MailingService">
    <port name="MailingPort" binding="tns:MailingPortBinding">
        <soap:address location="http://localhost:8080/SoapService/MailingService"/>
    </port>
</service>

I don't get any errors in the Error Console when I'm trying to execute it on Firefox, and Internet Explorer is only displaying the Loading... and nothing more.

2
  • Pure Javascript w/ no frameworks? AJAX is a pain... Commented Nov 2, 2011 at 2:19
  • Yes pure Javascript. I found an example which is working great, the only difference was that it was making a POST request. Commented Nov 2, 2011 at 2:21

1 Answer 1

3

SOAP must be sent via a POST, not a GET.

Also, it looks like your WS-Messaging headers are wrong. In fact, I don't even see them.

Try issuing this call using a .NET client ("Add Service Reference"), and watch on the wire with Fiddler or something like it to see what's happening. Then do the same thing.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much, I just changed the GET for a POST and now it's working just fine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.