记一次调用第三方webservice接口出现访问网络不通问题(访问wsdl得到的xml报文中的定义的ip与访问的wsdl的ip不一样)
SDL
Simple Directmedia Layer
项目地址:https://gitcode.com/gh_mirrors/sd/SDL
免费下载资源
·
1.问题描述
第三方提供的webservice因为升级原因,换了新的环境搭建,提供了一个新的ip:port,其他不变。
2.处理操作
正常情况下,我只需申请防火墙权限接入,而后修改项目配置,重启应用即可。
3.实际情况
策略申请通过后,测试ssh访问策略可达,curl可正常返回,而后项目中替换接口配置项,重启应用,后台出现connect timeout相关的错误。
4.问题分析
访问目标端策略已通,可正常获取到webservice的接口定义,为什么还是超时?
使用xshell输入firefox打开linux内置浏览器访问http://xxxxx/webservice?wsdl,查看显示的内容末尾的标签<soap:address location="地址"/> ,其中的地址中的ip与实际浏览器访问的地址的ip不一致,导致使用动态创建调用webservice的客户端请求到xml中错误的地址,从而出现超时相关的错误。
5.问题解决
1.联系第三方接口提供方,沟通看这个应该是第三方的nginx配置转发出现了问题(沟通无果,一直扯皮)
2.改动本地调用代码,既然wsdl地址访问的xml内容中定义的ip是错的,那么我们可把访问到接口的定义另存成xml文件,把里面的ip改成正确,再通过代码去获取这个xml文件定义,创建动态客户端调用。如下代码片段形式。
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class DynamicClientExample {
public static void main(String[] args) {
// 创建动态客户端工厂实例
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// 使用在线wsdl路径
// String addressWebservice = "http://xxxx/webservice.asmx?wsdl";
// 加载wsdl定义的xml文件(访问wsdl路径再另存为本地xml文件)
String addressWebservice="D:\\test\\webservice.xml";
try {
// 调用服务的方法
Object[] result = dcf.createClient(addressWebservice).invoke("getMethod");
// 输出结果
System.out.println(result[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
GitHub 加速计划 / sd / SDL
8.87 K
1.67 K
下载
Simple Directmedia Layer
最近提交(Master分支:3 个月前 )
a57c5669 - 3 个月前
20a6193e - 3 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)