Java:SOAP 消息发送失败但在 SOAPUI 中有效

标签 java soap

我正在创建一个 SOAP 消息,然后尝试使用以下代码发送它。

try {
  System.setProperty("http.proxyHost", "proxy.myproxy.com");
  System.setProperty("http.proxyPort", "80");
  connection = SOAPConnectionFactory.newInstance().createConnection();
  response = connection.call(message, "https://www.service.com/call");  
  connection.close();
} catch (SOAPException e) {
  e.printStackTrace();
} catch (UnsupportedOperationException e) {
  e.printStackTrace();
} 
finally{
  System.setProperty("http.proxyHost", "");
  System.setProperty("http.proxyPort", "");
}

最后是因为我访问本地域上的url时需要绕过代理。我知道这是一种黑客攻击,并且会对其他解决方案感兴趣。但是,真正的问题涉及超时。每次都会超时,但是,如果我获取 SOAP 消息并使用 SOAPUI(相同的代理设置)发送它,我会得到成功的响应。

Java 代码的响应...

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>java.net.ConnectException: Connection timed out: no further information</faultstring></soapenv:Fault></soapenv:Body></soapenv:Envelope>

最佳答案

我最终使用了这个...

public static String soapHttpRequest(RequestInfo re) {
    HttpURLConnection connection = null;
    OutputStreamWriter wr = null;
    BufferedReader rd = null;
    StringBuilder sb = null;
    String line = null;

    URL serverAddress = null;

    System.setProperty("http.proxyHost", "proxy.my.com");
    System.setProperty("http.proxyPort", "80");
    System.setProperty("https.proxyHost", "proxy.my.com");
    System.setProperty("https.proxyPort", "80");

    try {
                    serverAddress = new URL("https://site.com/service/default.asp");
        // set up out communications stuff
        connection = null;

        // Set up the initial connection
        connection = (HttpURLConnection) serverAddress.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-type", "text/xml; charset=utf-8");
        connection.setRequestProperty("SOAPAction", 
              "https://site.com/service/default.asp#Method");
        OutputStream reqStream = connection.getOutputStream();
        reqStream.write(getSoapMessageString(re).getBytes());
        connection.connect();


        // read the result from the server
        rd = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        sb = new StringBuilder();

        while ((line = rd.readLine()) != null) {
            sb.append(line + '\n');
        }
        String val = sb.toString();
        System.out.println(val);
        return val;

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        // close the connection, set all objects to null
        connection.disconnect();
        rd = null;
        sb = null;
        wr = null;
        connection = null;
              // Closing to prevent issues with local calls
        System.setProperty("http.proxyHost", "");
        System.setProperty("http.proxyPort", "");
        System.setProperty("https.proxyHost", "");
        System.setProperty("https.proxyPort", "");
    }
    return null;
}

关于Java:SOAP 消息发送失败但在 SOAPUI 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16288958/

相关文章:

java - 我如何使用 Seam 框架将表单字段作为操作参数传递?

java - 如何在android中的同一 Activity 上对4个不同端点进行4个不同的调用并将累积结果传递给适配器

java - HTTPS下载文件报错android 4.4

python - 使用 suds 在 SOAP 请求中多次发送相同类型

php - 设置 Zend Soap 客户端内容类型

android - 如何在android中进行SOAP解析列表

java - 图形用户界面 : JButton Covering almost the entire screen

java - android studio点击Listview并设置view

xml - 向 OTRS 发送带有变音符号的 Soap-Request

ruby - Savon v3.x - 如何将完整的 xml 消息作为 SOAP 请求传递