webservice方式调用接口,使用经验。

时间:2025-02-07 11:00:31

最近做业务的时候,需要调用一个第三方接口,接口协议为:接口协议:WebServices。

之前没搞过这种调用,所以查了很多资料,最终搞定。

这里记录下使用心得,希望能帮到正在看此文章的你。

接口提供方给的文档中,有接口地址,方法名,入参等。

直接贴代码,这里是采用axis的方式调用。

<dependency>
            <groupId></groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId></groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
 </dependency>

正式代码

   public Object deal(@RequestBody Map<String, Object> map) throws Exception {
        
        String xxx= (String) ("xxx");
        //获取webservice接口地址
        String endpoint = "/xxx/";
        //命名空间,可以直接打开接口地址查看
        String soapaction = "/";
        //调用的方法名
        String method = "xxx";
        // 创建一个服务(service)调用(call)
         service = new ();
        // 通过service创建call对象
        Call call = (Call) ();
        // 设置service所在URL
        (endpoint);
        (new QName(soapaction, method));
        
        //设置参数及类型,与接口参数对应
        //之前这里一直不知道是什么意思,搞了很久才明白
        //第一个参数:命名空间
        //第二个参数:参数的名字
        //第三个参数:参数的类型
        
        (new QName(soapaction, "username"),
                Constants.XSD_STRING, );
        (new QName(soapaction, "password"),
                Constants.XSD_STRING, );
        (new QName(soapaction, "xxx"),
                Constants.XSD_STRING, );
        (true);
        //返回参数的类型
        (new QName(soapaction, method), );
        (soapaction + method);

        //invoke调用方法并传递参数,获取XML
        //new Object[]里是调用第三方接口的入参,可以在方法入参有,或者直接写死,我这里我username,password就是写死的
        String invoke = (String) (new Object[]{username, password, xxx});
        JSONObject result = (invoke);
        return result ;
    }

本来也是直接接收第三方接口需要的入参的,结果不知道为什么整个json都变成入参了,所以现在是用map接收。

之前我搜索资料的时候,好多文章的接口地址后面不是"asmx",而是"?"结尾,目前还不知道有什么区别,大家在使用的时候直接把你的东西替换掉就可以了。