Java:SOAP消息无法发送但在SOAPUI中有效

问题描述:

我正在创建SOAP消息,然后尝试使用以下代码发送它。Java:SOAP消息无法发送但在SOAPUI中有效

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", ""); 
} 

终于是因为我需要绕过代理,当我访问本地域上的网址。我知道这是一种黑客攻击,并会对其他解决方案感兴趣。但是,真正的问题是处理超时。但是,如果我将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; 
} 
+0

那么,什么是解决办法,其实?刚刚添加了httpS的代理? – acdcjunior 2013-05-01 03:13:07

+0

不是使用SoapConnection而是使用HttpRequest作为具有给定信息的帖子。我从来没有想过如何在SoapConnection中使用代理。 – Jackie 2013-05-02 01:51:44