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 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐