最近在工作中要到的技术点分享。
1 webservice介绍
webservice 即 web 服务,因互联网而产生,通过 webservice 这种 web 服务,我们可以实现互联网应用之间的资源共享,比如我们想知道 手机号码归属地,列车时刻表,天气预报,省市区邮政编码等信息,由于我们自己的数据库中并没有这些信息,那么我们可以调用第三方提供的 webservice服务,获取这些信息;
webservice 是一种系统之间进行调用的技术,系统之间调用的技术有:httpClient、hessian、dubbo、webservice 等;WebService 是一种跨越编程语言,跨越操作系统,跨越终端的远程调用技术,比如一个系统是 Java 语言开发的,另一个系统是 PHP 语言开发的,他们之间要实现信息交互,则可以使用 webservice 进行数据交互;
所以 webservice 实现了异构系统之间的通信,不管是采用什么语言编写的,不管部署在什么操作系统平台上,使用 webservice 都可以实现信息的交换;
2 webservice核心要素
2.1 SOAP
SOAP 英文全称为:Simple Object Access Protocol,即简单对象访问协议,它是基于 xml 格式的消息交换协议;
OAP 定义了信息交换的格式,它包含一个重要的信封 envelope,使用信封envelope 来包装要传递的信息,使用命名空间 namespace 来区分传递的信息;简单来说,在 WebService 中传递的信息就是一封信,SOAP 就是信的通用格式,它定义了一封信应该有信封,信封里装着信的内容;
信封(envlope)的格式是固定的,而信的内容(要传递的数据)可以自己定义;SOAP 协议传输的数据采用 xml 格式进行封装,采用 http 协议进行传输,即soap=xml+http;
2.2 WSDL
WSDL 英文全称为 Web Service Description Language,即 Web Service 描述语言;它使用 xml 对 Web Service 进行描述,比如提供服务的方法、参数、返回值、数据类型等信息进行描述;简单来说,wsdl 就是 webservice 服务的使用说明书;
3 webservice的使用场景
1、应用系统集成
多个应用系统集成在一起,则需要信息交换或通信,那么可以采用 webservice进行通信;
2、异构系统之间通信
异构系统,主要是指编程语言不同的系统;不同系统之间,特别是开发语言不同的系统之间,可以通过 webservice 进行信息交换;
3、软件复用
webservice 可以作为一个公共的服务,供客户端调用,避免软件重复开发工作;
服务端配置:
pom配置
<!--cxf支持 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.5.6</version>
</dependency>
目录结构:
config配置:
service配置:
serviceImpl代码:
然后就可以进行测试了
首先在页面访问,出现图示说明服务端已经开发好了
注意点:config中配置的发布的接口名称
测试用例:postman
入参大小写问题处理:
使用在生成的get方法上使用@XMLElement注解
package com.sinosoft.tmnch.api.wx.golf.vo;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlElement;
public class SendTravelBizRequest {
/**
* 相关请求信息
*/
@NotNull(message = "RequestRelated不能为空")
@Valid
private RequestRelated requestRelated;
/**
* 参考信息
*/
@NotNull(message = "reference不能为空")
@Valid
private Reference reference;
/**
* 保单基本信息
*/
@NotNull(message = "PolicyBasicInfo不能为空")
@Valid
private PolicyBasicInfo policyBasicInfo;
/**
* 保险人信息列表
*/
@NotNull(message = "InsuredList不能为空")
@Valid
private InsuredList insuredList;
@XmlElement(name = "RequestRelated")
public RequestRelated getRequestRelated() {
return requestRelated;
}
public void setRequestRelated(RequestRelated requestRelated) {
this.requestRelated = requestRelated;
}
@XmlElement(name = "Reference")
public Reference getReference() {
return reference;
}
public void setReference(Reference reference) {
this.reference = reference;
}
@XmlElement(name = "PolicyBasicInfo")
public PolicyBasicInfo getPolicyBasicInfo() {
return policyBasicInfo;
}
public void setPolicyBasicInfo(PolicyBasicInfo policyBasicInfo) {
this.policyBasicInfo = policyBasicInfo;
}
@XmlElement(name = "InsuredList")
public InsuredList getInsuredList() {
return insuredList;
}
public void setInsuredList(InsuredList insuredList) {
this.insuredList = insuredList;
}
}
既然使用spring+webservice
就交给框架处理,就查看了,关于实体类生成xml的api,在实体类上加了注解;
加这个的原因就是,wsdl在拼接表单的时候,会将实体类中的get方法取出,并且降低一个参数小写。