webService开发接口相关问题记录

一、webservice接口介绍

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。 远程调用,就是一台计算机的应用可以调用其他计算机上的应用。例如:支付宝,支付宝并没有银行卡等数据,它只是去调用银行提供的接口来获得数据。还有天气预报等,也是气象局把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能。

本次项目是接入污水厂设备采集的数据,对接人售后技术员(非开发人员)给的接口文档很粗糙,没有清晰说明的话看的不是很明白。同时作为第一次接触webservice接口的菜鸟我来说看着wsdl更是一脸懵逼,所以还是百度大法好啊,记录一下处理过程:

第一步首先使用postman工具调试接口

查阅相关文章经过一顿捯饬,相当“自信”的跟对方的说“你们接口调不通”,对方不懂代码,所以我收获一张对方调试的图片:
在这里插入图片描述
事实证明若不是这张图片,body里面的参数设置是wsdl文档中也无法看出来的。最终经过与文档对比,最终设置成功:
POST请求,Headers中添加Content-Type:text/html,Body里面raw中的xml格式

<?xml version="1.0" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:impl="http://impl.*****.zeei.com.cn/">
    <soapenv:Header/>
    <soapenv:Body>
        <impl:wsExecute>
        <arg0>datadd</arg0>
        <arg1>{、、、参数、、、,endtime:'2021-6-7'}</arg1>
        </impl:wsExecute>
    </soapenv:Body>
</soapenv:Envelope>

第二步如何在java中调用外部的webservice接口

导入依赖(版本仅供参考):

 <!--webservice接口调用-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.6</version>
        </dependency>
        <!-- 需要使用到JSONObject与JSONArray -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

java代码如下所示:

public JSONObject test(String arg0, String arg1, String info){
        log.info(info + "拉取数据====================wsExecute方法调用开始");
        //调用接口中方法wsExecute,两个参数arg0和arg1需要传入
        String method = "wsExecute";
        JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
        //webservice接口IP地址
        Client client = clientFactory.createClient("http://110.*****.1/DataService?wsdl");
        JSONObject obj = new JSONObject();
        Object[] result = new Object[0];
        String pointcode = "{pointcode:'" + arg1 +"'}";

        try {
        	// webservice中的方法;arg0是接口方法;pointcode是接口文档要传入的参数
            result = client.invoke(method, arg0, pointcode);
            obj = JSONObject.parseObject((String)result[0]);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(info + "获取失败");
        }
        log.info(info + "拉取数据====================wsExecute方法调用结束");
        return obj;
    }

第三步数据处理过程的方法

查看JSONObject、JSONArray源码:

public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {...

public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {...
//数据处理
	//获取结果
    JSONObject obj = new JSONObject();
    Object[] resulet = client.invoke(method, arg0, arg1);
    obj = JSONObject.parseObject((String)resulet[0]);
	
	//获取key中的value
	JSONArray jsonArray = obj.getJSONArray("data");
	JSONObject jsonObject = jsonArray.getJSONObject(i); //遍历获取
	String val0 = jsonObject.get("POLLUTENAME").toString();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值