springboot 整合webservice 相关说明
1.环境依赖 jdk8, springboot 2.3.12.release,cxf版本需要根据springboot版本修改,方法:查看springboot版本的发布日期,然后根据日期找相近的两个版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.12.RELEASE</version>
</dependency> <dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.4.5</version>
</dependency>
2. WebserviceConfig.java

1 package com.example.demo.demos.nacosconfig;
2
3 import javax.xml.ws.Endpoint;
4
5 import org.apache.cxf.bus.spring.SpringBus;
6 import org.apache.cxf.jaxws.EndpointImpl;
7 import org.apache.cxf.transport.servlet.CXFServlet;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.boot.web.servlet.ServletRegistrationBean;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
12
13 import com.example.demo.demos.webservice.IUserWebService;
14
15 @Configuration
16 public class WebServiceConfig {
17
18 /************* 要发布的webservice,需要有对应的实现类,建议参照下文中的命名规范 ****************/
19 @Autowired
20 private IUserWebService webService;
21
22 @SuppressWarnings({ "rawtypes", "unchecked" })
23 @Bean
24 public ServletRegistrationBean cxfServlet() {
25 return new ServletRegistrationBean(new CXFServlet(), "/ws/*");
26 }
27
28 @Bean
29 public SpringBus cxf() {
30 return new SpringBus();
31 }
32
33 @Bean
34 public Endpoint endpoint() {
35 EndpointImpl endpoint = new EndpointImpl(cxf(), webService);
36 endpoint.publish("/api");
37 return endpoint;
38 }
39 }
3. 接口示例和规范

1 package com.example.demo.demos.webservice;
2
3 import javax.jws.WebMethod;
4 import javax.jws.WebService;
5
6 /**
7 * name决定了生成的相关调用代码是否简单明了且符合上下文语境<br/>
8 * targetNamespace 无所谓,和实现类一致即可
9 * @author Administrator
10 *
11 */
12 @WebService(name = "userService", targetNamespace = "https://www.demo.tech")
13 public interface IUserWebService {
14
15 @WebMethod
16 public String sayHello(String name);
17 }
4.实现类

1 package com.example.demo.demos.webservice.impl;
2
3 import javax.jws.WebService;
4
5 import org.springframework.stereotype.Component;
6
7 import com.example.demo.demos.webservice.IUserWebService;
8
9 /**
10 *
11 * class 类名如下,去掉接口中的首字母'I'和结尾单词'Service'<br/>
12 * 生成的调用代码语境就比较通顺
13 *
14 * @author Administrator
15 *
16 */
17 @Component
18 @WebService(targetNamespace = "https://www.demo.tech", endpointInterface = "com.example.demo.demos.webservice.IUserWebService")
19 public class UserWeb implements IUserWebService {
20
21 public String sayHello(String name) {
22 return String.format("hello,%s", name);
23 }
24 }
5. 打开要生成的文件夹,即生成的代码要保存到哪里就打开哪个文件夹,然后运行命令 wsimport -encoding UTF-8 -s . http://127.0.0.1:8080/ws/api?wsdl 自动生成java相关代码
6. 测试代码就会变得语境通顺

1 package com.example.demo;
2
3 import java.net.MalformedURLException;
4 import java.net.URL;
5
6 import javax.xml.namespace.QName;
7 import javax.xml.ws.Service;
8
9 import https.www_zqxx.UserService;
10
11 public class WebServiceTest {
12 public static void main(String[] args) throws MalformedURLException {
13 System.setProperty("javax.xml.bind.JAXBContext", "com.sun.xml.internal.bind.v2.ContextFactory");
14 // 创建WSDL的URL
15 URL url = new URL("http://localhost:8080/ws/api?wsdl");
16 // 指定命名空间和服务名称
17 QName qName = new QName("https://www.demo.tech", "UserWebService");
18 Service service = Service.create(url, qName);
19 // 通过getPort方法返回指定接口
20 UserService userService = service.getPort(UserService.class);
21 String res = userService.sayHello("小明");
22 System.out.println(res);
23 }
24 }
7. 统一封装结果类

package com.zqxxjs.v1.common; import java.util.List; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "ResponseEntity")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "code", "msg", "result" })
public class ResponseEntity<T> { private Integer code;
private String msg; private Message<T> result; public Integer getCode() {
return code;
} public void setCode(Integer code) {
this.code = code;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public Message<T> getResult() {
return result;
} public void setResult(Message<T> result) {
this.result = result;
} public static <E> ResponseEntity<E> success(List<E> data, Long count) {
ResponseEntity<E> entity = new ResponseEntity<>();
entity.setCode(Constant.SUCCESS_CODE);
entity.setMsg(Constant.SUCCESS_MSG);
Message<E> resultTmp = new Message<>();
resultTmp.setCount(count);
resultTmp.setData(data);
entity.setResult(resultTmp);
return entity;
} }
8. 配合mbg插件,在生成的实体类上边要加的相关注解,注解生成工具:

package com.zqxxjs.order.common; import java.io.File;
import java.lang.reflect.Field;
import java.util.Collection; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils; public class XmlUtil {
public static void main(String[] args) throws Exception {
String packageName="com.zqxxjs.order.entity";
String path = Thread.currentThread().getContextClassLoader().getResource(packageName.replace(".", "/")).getPath();
Collection<File> entityClassFile = FileUtils.listFiles(new File(path), new String[] { "class" }, false);
for (File file : entityClassFile) {
if (file.getName().contains("Example")) {
continue;
}
Class<?> c = Class.forName(packageName+"." + FilenameUtils.getBaseName(file.getName()));
Field[] fds = c.getDeclaredFields();
String s = ("@XmlType(propOrder = { ");
String[] tmp = new String[fds.length - 1];
for (int i = 0; i < tmp.length; i++) {
Field f = fds[i];
if (f.getName().equalsIgnoreCase("serialVersionUID")) {
continue;
} tmp[i] = String.format("\"%s\"", f.getName());
} System.out.println("\n\n@XmlRootElement(name = \""+c.getSimpleName()+"\")");
System.out.println("@XmlAccessorType(XmlAccessType.FIELD)");
s = s.concat(String.join(",", tmp)).concat("})");
System.out.println(s);
System.out.println("-----------------------------------------------------------------");
} }
}
9. 加好后的示例代码

package com.zqxxjs.v1.entity; import java.io.Serializable;
import java.math.BigDecimal; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; /**
*
* This class was generated by MyBatis Generator. This class corresponds to the
* database table finance_account_info
*/ @XmlRootElement(name = "FinanceAccountInfo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "id", "serialNumber", "projectNumber", "projectName", "director", "amountOfMoney", "createDate",
"financeNumber", "remark" })
public class FinanceAccountInfo implements Serializable {
/**
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.id
*
* @mbg.generated
*/
private Integer id; /**
* Database Column Remarks: 流水号
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.serial_number
*
* @mbg.generated
*/
private String serialNumber; /**
* Database Column Remarks: 项目编号
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.project_number
*
* @mbg.generated
*/
private String projectNumber; /**
* Database Column Remarks: 项目名称
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.project_name
*
* @mbg.generated
*/
private String projectName; /**
* Database Column Remarks: 负责人
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.director
*
* @mbg.generated
*/
private String director; /**
* Database Column Remarks: 金额
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.amount_of_money
*
* @mbg.generated
*/
private BigDecimal amountOfMoney; /**
* Database Column Remarks: 往来日期
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.create_date
*
* @mbg.generated
*/
private String createDate; /**
* Database Column Remarks: 财务编号
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.finance_number
*
* @mbg.generated
*/
private String financeNumber; /**
* Database Column Remarks: 备注
*
* This field was generated by MyBatis Generator. This field corresponds to the
* database column finance_account_info.remark
*
* @mbg.generated
*/
private String remark; /**
* This field was generated by MyBatis Generator. This field corresponds to the
* database table finance_account_info
*
* @mbg.generated
*/
private static final long serialVersionUID = 1L; /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.id
*
* @return the value of finance_account_info.id
*
* @mbg.generated
*/
public Integer getId() {
return id;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.id
*
* @param id the value for finance_account_info.id
*
* @mbg.generated
*/
public void setId(Integer id) {
this.id = id;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.serial_number
*
* @return the value of finance_account_info.serial_number
*
* @mbg.generated
*/
public String getSerialNumber() {
return serialNumber;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.serial_number
*
* @param serialNumber the value for finance_account_info.serial_number
*
* @mbg.generated
*/
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.project_number
*
* @return the value of finance_account_info.project_number
*
* @mbg.generated
*/
public String getProjectNumber() {
return projectNumber;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.project_number
*
* @param projectNumber the value for finance_account_info.project_number
*
* @mbg.generated
*/
public void setProjectNumber(String projectNumber) {
this.projectNumber = projectNumber;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.project_name
*
* @return the value of finance_account_info.project_name
*
* @mbg.generated
*/
public String getProjectName() {
return projectName;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.project_name
*
* @param projectName the value for finance_account_info.project_name
*
* @mbg.generated
*/
public void setProjectName(String projectName) {
this.projectName = projectName;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.director
*
* @return the value of finance_account_info.director
*
* @mbg.generated
*/
public String getDirector() {
return director;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.director
*
* @param director the value for finance_account_info.director
*
* @mbg.generated
*/
public void setDirector(String director) {
this.director = director;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.amount_of_money
*
* @return the value of finance_account_info.amount_of_money
*
* @mbg.generated
*/
public BigDecimal getAmountOfMoney() {
return amountOfMoney;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.amount_of_money
*
* @param amountOfMoney the value for finance_account_info.amount_of_money
*
* @mbg.generated
*/
public void setAmountOfMoney(BigDecimal amountOfMoney) {
this.amountOfMoney = amountOfMoney;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.create_date
*
* @return the value of finance_account_info.create_date
*
* @mbg.generated
*/
public String getCreateDate() {
return createDate;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.create_date
*
* @param createDate the value for finance_account_info.create_date
*
* @mbg.generated
*/
public void setCreateDate(String createDate) {
this.createDate = createDate;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.finance_number
*
* @return the value of finance_account_info.finance_number
*
* @mbg.generated
*/
public String getFinanceNumber() {
return financeNumber;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.finance_number
*
* @param financeNumber the value for finance_account_info.finance_number
*
* @mbg.generated
*/
public void setFinanceNumber(String financeNumber) {
this.financeNumber = financeNumber;
} /**
* This method was generated by MyBatis Generator. This method returns the value
* of the database column finance_account_info.remark
*
* @return the value of finance_account_info.remark
*
* @mbg.generated
*/
public String getRemark() {
return remark;
} /**
* This method was generated by MyBatis Generator. This method sets the value of
* the database column finance_account_info.remark
*
* @param remark the value for finance_account_info.remark
*
* @mbg.generated
*/
public void setRemark(String remark) {
this.remark = remark;
}
}
springboot 整合webservice 相关说明的更多相关文章
- Springboot整合webservice
Springboot整合webservice 2019-12-10 16:34:42 星期二 WebService是什么 WebService是一种跨编程语言和跨操作系统平台的远程调用技术,服务之间的 ...
- springboot整合WebService简单版
一.什么是webservice 关于webservice的介绍摘自百度百科,上面的介绍很详细.(链接:https://baike.baidu.com/item/Web%20Service/121503 ...
- springboot整合webservice采用CXF技术
转载自:https://blog.csdn.net/qq_31451081/article/details/80783220 强推:https://blog.csdn.net/chjskarl/art ...
- 【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)
1 分布式追踪系统 随着大量公司把单体应用重构为微服务,对于运维人员的责任就更加重大了.架构更复杂.应用更多,要从中快速诊断出问题.找到性能瓶颈,并不是一件容易的事.因此,也随着诞生了一系列面向Dev ...
- springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息
1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...
- 很详细的SpringBoot整合UEditor教程
很详细的SpringBoot整合UEditor教程 2017年04月10日 20:27:21 小宝2333 阅读数:21529 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- SpringBoot整合Apache-CXF实践
一.Apache CXF是什么? Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS . ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
随机推荐
- 设计原则 --- SOLID
引言 SOLID是五个常见的面向对象设计原则的缩写,其目的是帮助开发者设计易于维护和扩展的软件系统 其中包含单一职责原则(SRP),开闭原则(OCP),里氏替换原则(LSP),接口隔离原则(ISP), ...
- vscode复制相对路径时是反斜杠\,改为正斜杠/ [转]
痛点:复制路径的时候斜杠不对 解决:explorer.copyRelativePathSeparator 设置 在跳出来的设置页面的搜索栏里输入explorer.copyRelativePathSep ...
- vue3 markdown 读取文件的两种方法 有gitee发布地址
方法一: markdown-loader html-loader import的时候就转换成html了,每次需要build,但是可以本地双击就能看,放哪个目录页不限制 方法二: axios + mar ...
- day02-SpringMVC映射请求数据
SpringMVC映射请求数据 1.获取参数值 在开发中,如何获取到 http://xxx/url?参数名1=参数值1&参数名2=参数值2 中的参数? 之前的案例中我们知道:提交的url的参数 ...
- jquery之获取某个元素上的事件
jquery的给元素绑定的事件可以用data方法取出来 通过$(element).data("events")来获取 // 比如给一个button绑定两个click事件 $(&qu ...
- MySQL(初识数据库)
一 存储数据的演变过程 随意的存在一个文件中.数据格式也是千差万别的完全取决于我们自己 软件开发目录规范 限制了存储数据的具体位置 ''' bin conf core lib db readme.tx ...
- Python简单程序设计(计算程序设计(存款利息)篇)
如题: 解题方式如下:
- 记录--通过Promise实现分批处理接口请求
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 如何通过 Promise 实现百条接口请求? 实际项目中遇到需要批量发起上百条接口请求怎么办? 最新案例代码在此!点击看看 前言 不知你项 ...
- 如何在windows系统下下载、安装python程序及集成开发环境PyCharm
1.python下载 python下载官网: https://www.python.org/ http://python.p2hp.com/ 中文网 点击进入官网,进入window下载页面. http ...
- KingbaseES V8R6 索引膨胀
索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂.合并等,导致索引访问效率降低.维护成本增加.另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有 ...