关于调用WSDL接口出现"java.net.ConnectException"异常的解决方案
在调用合作方提供的WSDL接口时,有些情况会无法访问接口,出现"java.net.ConnectException"的异常。
例如下面是WSDL的接口地址:
http://ap.bnet.cn/AsyncInterfaceForSI/v1_2/BnetForSIWS.asmx?wsdl
然而在WSDL文件中指定访问的IP地址配置却是如下:
<wsdl:service name="BnetForSIWS">
<wsdl:port name="BnetForSIWSSoap" binding="tns:BnetForSIWSSoap">
<soap:address location="http://ap.bnet.cn:9104/AsyncInterfaceForSI/v1_2/BnetForSIWS.asmx"/>
</wsdl:port>
</wsdl:service>
按照以上配置,调用方通过远程调用BnetForSIWS这个方法的时候,就会去访问带端口号的这个IP地址。如果这个IP地址仅限于接口提供方内部可以访问,禁止外部访问,调用方那边就会出现"java.net.ConnectException"的异常,即无法访问该接口方法。
解决方案:通过显式指定接口方法的访问地址 endpoint address 为接口提供方指定的地址,以保证调用该接口方法时访问的是该地址,如下:
URL WSDL_URL = new URL("http://ap.bnet.cn/AsyncInterfaceForSI/v1_2/BnetForSIWS.asmx?wsdl");
BnetForSIWS ss = new BnetForSIWS(WSDL_URL);
BnetForSIWSSoap port = ss.getBnetForSIWSSoap();
BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WSDL_URL.toString());
完。

浙公网安备 33010602011771号