我正在创建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>
答案 0 :(得分:2)
我最终使用了这个...
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;
}