【工具使用】【WebService】WebService 是什么以及如何调试、如何对接开发

【工具使用】【WebService】WebService 是什么以及如何调试、如何对接开发

1 前言

今儿对接外部系统,莫名的有两个 WebService 的接口,很是纳闷。琢磨了会儿,来捋捋。

首先看下什么是 WebService 呢?

WebService 是一种基于网络的技术,它允许不同的应用程序在互联网上相互通信。具体来说,WebService 是一种基于标准化协议和格式的应用程序接口(API),它使用 XML 和 HTTP 来进行通信。WebService 可以用于在不同的平台和编程语言之间传输数据,从而使应用程序之间的集成更加容易。例如,一个运行在 Java 平台上的应用程序可以通过 WebService 接口向一个运行在.NET 平台上的应用程序发送请求,并接收响应。简而言之, WebSocket 定义了一套传输数据格式的规范,通信协议还是用的 HTTP。因此,调用 WebService 接口 本质还是调用 HTTP 接口,只要把参数按规范传对即可。

说白了我的理解就是:网络协议使用的还是 HTTP,只是请求的内容以及返回都是 XML格式的(XML格式又是按某种规范规则的形式)。

那么要对接一个 WebService 首先就是要跟对方要他们的 WSDL 地址。

2 获取接口描述文件:WSDL

WSDL 说 WebService 的接口描述文件。具体来说:

WSDL是 Web 服务描述语言(Web Services Description Language)的缩写。它是一种基于XML的语言,用于描述Web服务的接口、方法和数据类型。WSDL文件通常包含一个或多个服务定义,每个服务定义描述了一个或多个相关的操作,以及它们接受和返回的消息的格式。WSDL文件还可以描述Web服务的地址、协议和传输机制等信息。使用WSDL文件,开发人员可以明确了解Web服务的接口和方法,以便在不同的平台和编程语言之间进行通信和集成。

一般来说,获取接口描述文件可以通过访问 WebService地址?WSDL。比如:http://localhost:8082/web/services/weater?WSDL。响应的内容类似这样:

其中:

tagetNamespace 用于指定包含该 WSDL 的 XML 命名空间的 URL。它定义了 WSDL 中包含的所有类型、元素和消息的全局唯一命名空间。 xfire.sap.webservice.wms 中的 xfire是webservice的一个实现框架。

中 name 属性值为请求名称和请求方法。接口允许多个方法。本次请求方法名称: saveDataInfo。

标签中 xsd:complexType name="in0",允许有多个参数。本次请求参数名称: in0。

3 在 SOAPUI 中调用 WebService

下载地址:https://onebox.51xiazai.cn/soft/989454.htm

(1)打开软件是这样的:

(2)然后点击 SOAP,粘贴你的 WSDL 地址,然后点击 OK。

(3) SOAP 就会识别出你的 WSDL,并显示出所有的请求:

(4)发送请求:

这就是 SOAP 软件帮助我们调试 webService接口,可以看到它的请求和返回都是 XML 格式,网络协议就是 HTTP哈。

4 在 Postman 中调用 WebService

经过上边的 SOAP 的请求过程,那我们用 Postman 同样可以,我们把请求的路径以及参数赋值一份到我们的 Postman :

5 在 Java 中调用 WebService

上边都是用工具,那么我们在代码中如何去做,其实就是发送一次 HTTP 请求了,只不过请求参数需要传 XML格式,结果的解析也是 XML:

import cn.hutool.http.HttpUtil;

import cn.hutool.json.JSONObject;

import cn.hutool.json.XML;

import com.alibaba.fastjson.JSON;

import com.bitsun.core.common.util.StringUtils;

import lombok.extern.slf4j.Slf4j;

import org.apache.groovy.util.Maps;

import org.springframework.stereotype.Component;

import java.util.Map;

/**

* @author: kuku

* @description

*/

@Slf4j

@Component

public class U8cWebServiceUtils {

public String 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)) {

throw new RuntimeException("webservice响应结果为空");

}

String result;

try {

JSONObject responseJson = XML.toJSONObject(response);

result = responseJson.getJSONObject("soap:Envelope").getJSONObject("soap:Body")

.getJSONObject("ns1:saveDateResponse").get("return", String.class);

} catch (Exception e) {

throw new RuntimeException("webservice响应结果解析异常:" + e.getMessage());

}

if (StringUtils.isBlank(result)) {

throw new RuntimeException("webservice响应结果result为空");

}

return result;

}

/**

* 组织数据,将数据拼接一下

* @param data

* @return

*/

public static String getXML(String data){

String soapXML = "\n"

+""

+""

+"" //webservice接口方法名

+ ""+data+"" //webservice接口参数名

+""

+""

+"";

return soapXML;

}

/**

* 接口

* @return

*/

public String sendAssembleItem() {

Map map = Maps.of(

"system", "ctj"

, "params1", "1"

, "params2", "2"

);

String res = send(JSON.toJSONString(map));

return res;

}

public static void main(String[] args) {

U8cWebServiceUtils u8cWebServiceUtils = new U8cWebServiceUtils();

System.out.println(u8cWebServiceUtils.sendAssembleItem());

}

}

上边只是一个简单的示例,两个关键点就是 getXML,将请求参数封装成 XML 格式的,XML里的方法名要跟你的 WSDL 里定义的一样哈,记得改。

另一个点就是请求返回的 XML 的值的获取,我这里是用的 Huttol 里的一个工具哈,

JSONObject responseJson = XML.toJSONObject(response);

这样去获取的。

6 WebService 怎么串联 JSON

其实我上边的例子,请求参数里标签的内容就是 JSON格式的,也就是双方提前约定好,在 WebService 的XML内容里放 JSON串,其实最外层还是 XML,只不过里边的标签内容,请求和返回都是 json,然后双方获取里边的 JSON 内容,进行处理。

7 小结

好了,关于 WebService 的过程就到这里哈,有理解不对的地方欢迎指正哈。

相关内容

抽取字符
bt365博彩

抽取字符

🕒 10-23 👁️ 9022
适合18岁以上玩的手游推荐
365betmobileapp

适合18岁以上玩的手游推荐

🕒 09-14 👁️ 2585