
1 前言今儿, 要与外部系统进行对接, 在这过程中, 莫名地出现了具有两个 的接口这种情况, 心里很是纳闷。仔细琢磨了一会儿, 决定动手梳理梳理, 来捋捋。首先看下什么是 呢有一种技术, 它是基于网络的, 这种技术能让不同的应用程序于互联网上相互通信。具体来讲, 它是一种基于标准化协议以及格式的应用程序接口, 也就是API, 它借助XML和HTTP去开展通信。它能够用来在不一样的平台以及编程语言之间传输数据, 进而让应用程序之间的集成变得更易于实现。比如说, 运行在Java平台上的一个应用程序能够通过该接口向运行在.NET平台上的一个应用程序发送请求, 并且接收响应。简短来说, 有一套规范被定义出来, 这规范是关于传输数据格式的, 然而通信用的通信协议依然是 HTTP , 所以, 调用接口这件事, 其本质实际上还是调用 HTTP 接口, 只要把对应的参数按照规范正确地传递就行。简单来讲, 我的认知是这样的: 网络协议所运用的依旧是HTTP, 只不过请求的那部分内容以及返回的部分全都是XML格式的, 而XML格式又是依照某种规范规则的样式来呈现的。那么, 要进行对接, 首先, 就是要向对方索要他们的WSDL地址。2 获取接口描述文件WSDLWSDL 说 的接口描述文件。具体来说Web服务描述语言Web的缩写是WSDL, 它是一种基于XML的语言, 用于描述Web服务的接口, 用于描述Web服务的方法, 用于描述Web服务的数据类型, WSDL文件通常包含一个或多个服务定义, 每个服务定义描述了一个或多个相关的操作, 每个服务定义描述了这些操作接受的消息的格式, 每个服务定义描述了这些操作返回的消息的格式, WSDL文件还可以描述Web服务的地址, WSDL文件还可以描述Web服务的协议, WSDL文件还可以描述Web服务的传输机制等信息。通过运用WSDL文件, 开发人员能够清晰知晓Web服务的接口, 还能清楚明了其方法, 进而在多样的平台以及不同的编程语言之间开展通信以及进行集成。通常情况下, 能够获取接口描述文件借助的方式是访问地址加上问号以及WSDL, 举例来说, 像是8082这个端口号下的web路径再加上斜杠以及问号和WSDL, 所得到的响应内容大致呈现出这样的情况。其中为了指定那个包含该WSDL的XML命名空间的URL, 它对WSDL里所包含的全部类型、元素以及消息定义出全局唯一的命名空间。xfire.sap..wms当中的xfire是属于一个实现框架。其中name属性值是请求名称跟请求方法。该接口准许有多个方法。这次请求方法的名称是这个。标签里xsd: namein0, 允许存在多个参数。这次请求参数的名称为in0。3在这个当中进行调用。下载地址1打开软件是这样的2紧接着, 去点击SOAP这一选项之处, 将你的WSDL地址予以粘贴处理, 随后再去点击OK这个按钮。3 首先, SOAP 会执行识别动作, 针对你的 WSDL 来进行, 继而呈现出全有的请求, 就是这样。4发送请求SOAP 软件助力我们调试接口, 此即为该情况, 能将其请求与返回皆视作 XML 格式, HTTP 便是其网络协议哟。4 在 中调用历经上边 SOAP 的请求流程, 那咱们能够同样做到, 把请求的路径给予赋值, 还有参数也赋值, 将其赋予到咱们的:5 在 Java 中调用上面全都是借助工具, 那我们于代码范围之内要怎样去开展呢, 实际上就是去发送一回 HTTP 请求了, 只是请求参数得传递 XML 格式, 结果的解析同样是 XML。importcn.hutool.http.HttpUtil;importcn.hutool.json.JSONObject;importcn.hutool.json.XML;importcom.alibaba.fastjson.JSON;importcom.bitsun.core.common.util.StringUtils;importlombok.extern.slf4j.Slf4j;importorg.apache.groovy.util.Maps;importorg.springframework.stereotype.Component;importjava.util.Map;/***author: kuku * description*/Slf4j ComponentpublicclassU8cWebServiceUtils {publicString send(String data) { String response HttpUtil.createPost(http://192.168.118.121:8087/uapws/service/nc.itf.qtnyingtong.QtnYingtongService)//请求内容格式 必须设置哦.header(Content-Type, text/xml)//将参数封装成 XML 内容.body(getXML(data)) .execute().body();if(StringUtils.isBlank(response)) {thrownewRuntimeException(webservice响应结果为空); } String result;try{ JSONObject responseJsonXML.toJSONObject(response); result responseJson.getJSONObject(soap:Envelope).getJSONObject(soap:Body) .getJSONObject(ns1:saveDateResponse).get(return, String.class); }catch(Exception e) {thrownewRuntimeException(webservice响应结果解析异常 e.getMessage()); }if(StringUtils.isBlank(result)) {thrownewRuntimeException(webservice响应结果result为空); }returnresult; }/*** 组织数据将数据拼接一下 *paramdata *return*/publicstaticString getXML(String data){ String soapXML \n //webservice接口方法名 data//webservice接口参数名 ;returnsoapXML; }/*** 接口 *return*/publicString sendAssembleItem() { Mapmap Maps.of(system, ctj,params1, 1,params2, 2); String ressend(JSON.toJSONString(map));returnres; }publicstaticvoidmain(String[] args) { U8cWebServiceUtils u8cWebServiceUtilsnewU8cWebServiceUtils(); System.out.println(u8cWebServiceUtils.sendAssembleItem()); } }上头仅仅是个简易的样本, 当中有两个关键要素也就是, 要把请求参数包装成 XML 样式的, XML 内部的方法名称得跟你那 WSDL 里所界定的保持一致, 可要记着去改。另外还有一个要点, 那便是关于请求返回的 XML 的值的获取, 在我这里所采用的是其中的一个工具哦。JSONObject responseJson XML.toJSONObject(response);这样去获取的。6 怎么串联 JSON实际上, 我上面所举的例子之中, 请求参数里标签的内容呈现为JSON格式, 这意味着双方预先达成约定, 要在的XML内容里放置JSON串, 事实上最外层依旧是XML, 只是其中标签的内容请求以及返回均为json, 随后双方获取其中的JSON内容, 并展开处理。7 小结行了, 有关 的进程至此为止, 要是存在理解有误的地方, 欢迎予以指出。