我正在尝试使用我自己的小Java客户端通过SSL发送SOAP请求,但它失败并显示“java.net.ConnectException:Connection refused”。使用SOAPUI发送的相同请求不会失败,我从服务器获得有效响应。
这是我试图运行的代码:
public static void main(String [] args)抛出MalformedURLException {
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
SSLUtilities.trustAllHttpsCertificates();
URL wsdlURL = new URL(MY_WSDL_LOCATION);
QName serviceName = new QName(MY_QNAME, NAME_OF_SERVICE);
Service service = Service.create(wsdlURL, serviceName);
Order myOrder = service.getPort(Order.class);
BindingProvider portBP = (BindingProvider) myOrder;
String urlUsed = (String) portBP.getRequestContext().
get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
System.out.println("Using URL: " + urlUsed);
((BindingProvider)myOrder).getRequestContext().put(
BindingProvider.USERNAME_PROPERTY, CORRECT_USERNAME);
((BindingProvider)myOrder).getRequestContext().put(
BindingProvider.PASSWORD_PROPERTY, CORRECT_PASSWORD);
AliveRequest aliveRequest = new AliveRequest();
MerchantInfo merchInfo = new MerchantInfo();
merchInfo.setMerchantId(CORRECT_MERCHANT_ID);
aliveRequest.setMerchantInfo(merchInfo);
AliveResponse aliveResponse = myOrder.alive(aliveRequest);
}
它因“java.net.ConnectException:Connection refused”异常而失败。当我使用SOAPUI从相同的WSDL构建请求时,使用相同的值填充相同的字段并输入相同的基本身份验证凭据,将返回有效的响应。
答案 0 :(得分:0)
问题在于我的Java客户端没有通过代理发送请求,因此我自己公司的防火墙阻止了它。与我自己的Java客户端不同,当SOAPUI的代理设置设置为“auto”(默认)时,SOAPUI实际上会检测系统的代理设置(可能读取系统环境变量)。解决方案是设置以下系统属性:
-Dhttps.proxySet=true
-Dhttps.proxyHost=MY_PROXY_HOST
-Dhttps.proxyPort=MY_PROXY_PORT