一、介绍

1.1 概述

不同平台、不同语言、不同机器的应用间程序实现通信,服务器暴露出远程对象的URI

client引入地址+Service+实体类(形式:提供jar包,或者基于xml格式的接口文档执行脚本生成),便可以直接调用对应方法,实际上是host:port/url,会转换为soap协议的xml文件,

后端-web service-相关介绍与实践_java

服务列表(更可读,展示全部的SEI):http://172.16.21.131:8080/myService

后端-web service-相关介绍与实践_xml_02

wsdl接口文档(针对单个SEI),http://172.16.21.131:8080/myService/api?wsdl

后端-web service-相关介绍与实践_xml_03

1.2 流程后端-web service-相关介绍与实践_java_04

后端-web service-相关介绍与实践_java_05


1.3 相关术语

WebService交互的过程就是,WebService遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据。

后端-web service-相关介绍与实践_java_06

XML,SOAP和WSDL就是构成WebService平台的三大技术

1、XML(数据和文件格式)

可扩展的标记语言(标准通用标记语言下的一个子集),是Web Service平台中表示数据的基本格式,是Web Service程序之间数据传输的载体

与平台无关,又与厂商无关。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD 定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。

web/应用开发中,通过http协议来进行通信,使用xml文件返回通用数据

2、XSD(XML标准数据类型)

W3C制定的标准数据类型,用于描述消息

XML Schema Definition,Web Service平台用XSD来作为数据类型系统。当你用某种语言如VB. NET或C# 来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。

3、SOAP(XML的协议风格=HTTP+XML)

SOAP(Simple Object Access Protocol,简单对象访问协议),它是用于交换XML,编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。

提供标准RPC方法实现调用web service

类似方式:REST

4、WSDL(接口文档)

Web Service描述语言,就是用机器能阅读的方式提供的一个基于XML且具有正式描述文档的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

后端-web service-相关介绍与实践_xml_07

标签解读,可以参考:https://mp.weixin.qq.com/s/gaTSD0BIh2olZ6TIFU-yBg

5、UDDI(服务注册表,类比nacos)

Universal Description Discovery and Integration,用于描述、发现、集成Web Service的技术
是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

6、SEI&SBI(对应的service)

SEI:WebService EndPoint Interface(终端),简言之就是服务器端用来处理请求的接口

SBI:SEI接口的实现类

需要通过EndPoint发布,客户端才能使用

7、JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS(Java中的web service规范)

Java API for XML-Based Web Services (JAX-WS)

通过@WebService 和 @WebMethod 注解指定web service方法

参考地址:在基于 SEI 的 JAX-WS Web Service 中公开方法 - IBM 文档

8、SOA(面向服务的架构)

SOA(Service-Oriented Architecture,面向服务的架构)是一种架构设计方法,它通过将应用程序分解为可重用、松散耦合的服务来优化跨不同系统和平台的业务流程。

服务可以通过企业服务总线(ESB)进行集成和管理,实现服务的发现、路由和协议转换等功能。

对比微服务(业务粒度&目标)

后端-web service-相关介绍与实践_java_08

9、wsimport(自动生成客户端代码的命令行工具)

wsimport是jdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码)

后端-web service-相关介绍与实践_Web_09后端-web service-相关介绍与实践_java_10

样例:

wsimport -p cn.cad.mobile -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

wsimport -s . D:\git\webservice-public-translation\src\main\java\EnglishChinese.xml


二、实战

2.1 相关框架

1、XFire

XFire 是下一代的Java SOAP框架。

XFire 提供了非常方便的API,使用这些API可以开发面向服务(SOA)的程序。它支持各种标准,性能优良(基于低内存的STAX 模型)。

官网:http://xfire.codehaus.org/

2、Apache CXF(=Celtix+XFire)

Celtix是Apache CXF的前身

CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

官网:http://cxf.apache.org/

对应依赖:cxf-spring-boot-starter-jaxws=cxf-rt-transports-http+cxf-rt-frontend-jaxws

3、Apache Axis

AXIS(Apache eXtensible Interaction System)是Apache的可扩展交互系统。

AXIS是一款开源的Web Service运行引擎,本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。

AXIS分为1.x系列和2系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x更加稳定,文档也比较齐全。

官网:http://axis.apache.org/

2.1 天气预报

1、下载并修改wsdl文件

(1)下载

地址:WEB服务(Web Servicrs)| 免费WEB服务 | 商业WEB服务 | XML Web Servicrs - WEBXML后端-web service-相关介绍与实践_java_11

(2)修改标签元素

原因:.net 开发报错

后端-web service-相关介绍与实践_java_12

2、新建maven项目&wsdl文件放到指定目录

后端-web service-相关介绍与实践_xml_13

3、运行wsimport命令生成class字节码文件

wsimport -s . D:\git\webservice-public-weather\src\main\java\WeatherWebService.xml

后端-web service-相关介绍与实践_xml_14

4、编写调用方法

后端-web service-相关介绍与实践_Web_15

package cn.com;

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWebService;
import cn.com.webxml.WeatherWebServiceSoap;

import java.util.Objects;

public class WeatherInvokeApp {
    public static void main(String[] args) {
        name();
    }

    public static void name() {
        //创建实例化对象
        WeatherWebService weatherWS = new WeatherWebService();
        //通过实例化对象创建接口
        WeatherWebServiceSoap serviceSoap = weatherWS.getWeatherWebServiceSoap();
        ArrayOfString arrOfShandong = serviceSoap.getSupportCity("山东");
        if (Objects.nonNull(arrOfShandong)) {
            arrOfShandong.getString().forEach(System.out::println);
        }
        //传入城市,获取当前城市天气状况
        ArrayOfString arr = serviceSoap.getWeatherbyCityName("52082");
        if (null != arr) {
            //获取到对象转换成集合遍历
            for (String message : arr.getString()) {
                System.out.println(message);
            }
        }
    }
}

2.2 整合Spring Boot

1、参考过程

爆破专栏丨SpringBoot2.x系列教程之整合Web Service实现远程接口调用(57) (qq.com)

2、相关依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
            <version>2.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.12</version>
        </dependency>

对应依赖:cxf-spring-boot-starter-jaxws

3、项目框架

后端-web service-相关介绍与实践_xml_16

4、调用

后端-web service-相关介绍与实践_xml_17

2.3 其他

1、用户名密码/常用信息拦截-客户端&服务端开发

Spring boot WebService 使用快速入门

2、hutool提供SoapClient,通过SOAP接口调用服务端&Postman传递xml访问

SpringBoot项目使用CXF框架开发Soap通信接口_cxf-spring-boot-starter-jaxws-CSDN博客