Soap Http post请求给出了IOException

时间:2014-04-25 08:09:48

标签: java soap

我正在尝试向服务器发送Soap请求。

这是我的java代码:

    try {
        String xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://www.telenet.be/TelemeterService/\">\n" +
                "  <SOAP-ENV:Body>\n" +
                "    <ns1:RetrieveUsageRequest>\n" +
                "      <UserId>test</UserId>\n" +
                "      <Password>test</Password>\n" +
                "    </ns1:RetrieveUsageRequest>\n" +
                "  </SOAP-ENV:Body>\n" +
                "</SOAP-ENV:Envelope>";
        URL myurl = new URL("https://t4t.services.telenet.be/TelemeterService?wsdl");
        HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
        con.setRequestMethod("POST");

        con.setRequestProperty("Content-length", String.valueOf(xmldata.length()));
        con.setRequestProperty("Content-Type", "text/xml; charset=\\\"utf-8\\\"\\r\\n");
        con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36");
        con.setDoOutput(true);
        con.setDoInput(true);

        DataOutputStream output = new DataOutputStream(con.getOutputStream());


        output.writeBytes(xmldata);

        output.close();

        DataInputStream input = new DataInputStream(con.getInputStream());


        for (int c = input.read(); c != -1; c = input.read())
            System.out.print((char) c);
        input.close();

        System.out.println("Resp Code:" + con.getResponseCode());
        System.out.println("Resp Message:" + con.getResponseMessage());
    }
    catch (IOException se)
    {
        se.printStackTrace();
    }

我得到例外:

java.io.IOException: Server returned HTTP response code: 500 for URL: https://t4t.services.telenet.be/TelemeterService?wsdl 

我使用此工具确认了我的请求:http://wsdlbrowser.com/soapclient?wsdl_url=https%3A%2F%2Ft4t.services.telenet.be%2FTelemeterService%3Fwsdl&function_name=retrieveUsage

我没有看到我的请求有什么问题。

2 个答案:

答案 0 :(得分:0)

网址末尾的?wsdl 用于获取wsdl,例如在浏览器中。尝试删除它,使端点网址 https://t4t.services.telenet.be/TelemeterService

答案 1 :(得分:0)

当我收到内部服务器错误时,我做的第一件事(也许你做的)是检查应用程序服务器日志。由于某些意外原因,无法访问服务器。 我没有看到任何问题让wsdl首先检查您是否可以使用Web服务。这是我一直在做的一种方法。