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

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

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

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

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

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

pom.xml

<dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</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) map.get("xxx");
        //获取webservice接口地址
        String endpoint = "http://xxx.xx.xxx.x/xxx/xxx.asmx";
        //命名空间,可以直接打开接口地址查看
        String soapaction = "http://tempuri.org/";
        //调用的方法名
        String method = "xxx";
        // 创建一个服务(service)调用(call)
        org.apache.axis.client.Service service = new org.apache.axis.client.Service();
        // 通过service创建call对象
        Call call = (Call) service.createCall();
        // 设置service所在URL
        call.setTargetEndpointAddress(endpoint);
        call.setOperationName(new QName(soapaction, method));
        
        //设置参数及类型,与接口参数对应
        //之前这里一直不知道是什么意思,搞了很久才明白
        //第一个参数:命名空间
        //第二个参数:参数的名字
        //第三个参数:参数的类型
        
        call.addParameter(new QName(soapaction, "username"),
                Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
        call.addParameter(new QName(soapaction, "password"),
                Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
        call.addParameter(new QName(soapaction, "xxx"),
                Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
        call.setUseSOAPAction(true);
        //返回参数的类型
        call.setReturnType(new QName(soapaction, method), String.class);
        call.setSOAPActionURI(soapaction + method);

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

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值