SpringBoot整合WebService(实用版)
SpringBoot整合WebService
简介
WebService就是一种跨编程语言和跨操作系统平台的远程调用技术
此处就不赘述WebService相关概念和原理了,可以参考:https://blog.csdn.net/c99463904/article/details/76018436
代码示例
此处共分两个端,客户端和服务端,一个负责调用接口,一个负责创建接口并实现
首先创建一个Maven父项目,在pom.xml文件中引入SpringBoot坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Server搭建
在父项目中创建服务端(Server)子项目,
pom.xml文件,引入以下坐标
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
<!-- 不引入会报错 报接口未实现 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.18.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
启动类(引导类)
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class,args);
}
}
User.java
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private Integer age;
}
UserService接口
@WebService(targetNamespace = "wsdl.aerfazhe.com",name = "userPortType")
public interface UserService {
@WebMethod
User getUserName(@WebParam(name = "name") String name);
}
UserService实现类
@WebService(
targetNamespace = "wsdl.aerfazhe.com", //命名空间 指定wsdl说明书在Client端所存放的包路径为com.aerfazhe.wsdl包下
name = "userPortType",
serviceName = "userService", //服务Name名称
portName = "userPortName",
endpointInterface = "com.aerfazhe.service.UserService" // 指定webService的接口类,此类也需要接入@WebService注解
)
public class UserServiceImpl implements UserService {
@Override
public User getUserName(String name) {
User user = new User(name, 28);
return user;
}
}
配置类
@Configuration
public class CxfWebServiceConfig {
@Bean("cxfServletRegistration")
public ServletRegistrationBean<CXFServlet> dispatcherServlet() {
return new ServletRegistrationBean<>(new CXFServlet(),"/ws/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public Endpoint endpoint(UserService userService) {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService);
endpoint.publish("/user");
return endpoint;
}
}
启动后访问wsdl说明书
http:localhost:8080/ws/user?wsdl

Client搭建
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.5</version>
</dependency>
<!-- 不引入会报错 报接口未实现 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.18.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.2.5</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>src/main/resources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>http://localhost:8080/ws/user?wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
配置类
@Configuration
public class CxfClientConfig {
private final static String SERVICE_ADDRESS = "http://localhost:8080/ws/user";
@Bean("cxfProxy")
public UserPortType createUserPortTypeProxy() {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress(SERVICE_ADDRESS);
jaxWsProxyFactoryBean.setServiceClass(UserPortType.class);
return (UserPortType) jaxWsProxyFactoryBean.create();
}
}
编译转换
将XML格式的wsdl说明书转化为Java对象格式
在Client客户端项目根路径下调出控制台,如下

使用maven命令进行转换,生成的Java代码在Client客户端下的src/main/resources/cxf目录下
mvn generate-sources

查看src/main/resources/cxf下的文件,如下

创建com/aerfazhe/wsdl包路径,将这些JavaObject剪切到该包路径下,如下

Controller
@RestController
public class UserController {
@Resource(name = "cxfProxy")
private UserPortType userPortType;
@GetMapping("/getUserName")
public User getUserName(String name) {
User user = userPortType.getUserName(name);
return user;
}
}
启动类
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class,args);
}
}
application.yml
server:
port: 8081
在当前项目根目录下,输入以下命令,将xml类型的wsdl说明书转化为Java对象
mvn generate-sources

启动后访问:http://localhost:8081/getUserName?name=张三

此时就调用成功喽
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整合UEditor教程
很详细的SpringBoot整合UEditor教程 2017年04月10日 20:27:21 小宝2333 阅读数:21529 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- springboot 整合 CXF 版本异常 java.lang.NoClassDefFoundError:ServletRegistrationBean
在使用SpringBoot 项目整合webservice组件 CXF的时候,在启动时,抛出异常如下,查阅资料初步判断为版本问题.升级到高版本后正常启动. cxf 刚开始使用版本 3.1.7 后更新为 ...
- idea使用springboot的webservice基于cxf
SpringBoot整合CXF实例: 服务端构建 <dependency> <groupId>org.apache.cxf</groupId> <artifa ...
- SpringBoot整合Apache-CXF实践
一.Apache CXF是什么? Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS . ...
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...
- spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
随机推荐
- mysql 自动挂掉
今天在看后台的时候,发现登录不上去了,登录页面是可以访问,但是就是登录不上去,上了后台看了一下,说mysql连接超时,然后我重启了一下服务器,发现依然报mysql的错误,我尝试连接mysql, 报了一 ...
- java LocalDateTime的使用
1.LocalDateTime的基本使用 //获取当前时间 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println( ...
- 业务系统对接CAS
启动类加@EnableCasClient <!--cas客户端--> <dependency> <groupId>net.unicon.cas</groupI ...
- react中super()的理解
首先 super() 是在 es6的class(类)的方法创建组件出现 下面是分别是构造函数创建组件和class(类)创建组件 构造函数方法创建组件 在构造函数方法中,在组件接收参数的时候,props ...
- C# 当前进程是否有控制台窗口
WPF应用程序,在VS的项目属性中,可以设置输出类型: 那我们在代码中,如何判断应用的类型呢.有没有控制台?是否Windows应用程序还是控制台应用程序? Kernel32下函数GetConsoleW ...
- [OpenCV-Python] 5 视频
文章目录 OpenCV-Python: II OpenCV 中的 Gui 特性 5 视频 5.1 用摄像头捕获视频 5.2 从文件中播放视频 5.3 保存视频 OpenCV-Python: II Op ...
- 【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究
作者:京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统,使用了 Elasticsearch 服务做数据存储,业务运营人员反馈,用户在使用该产品时发现,用户后台统计的订单笔数和导出的订单笔 ...
- FreeSSL申请免费证书
FreeSSL申请免费证书 FreeSSL 是一个免费证书和 SSL 证书管理平台.旨在为个人和小型企业提供免费 SSL 证书,以加强他们的网站和应用程序的安全性.与传统的 SSL 证书颁发机构不同, ...
- Latex-beamer的教程
Beamer头文件 Latex是一个非常精确且高效的排版工具,其中的beamer作为一个非常强大的模块承担着PPT任务的排版 首先引入头文件来开始: \documentclass{beamer} %h ...
- #Python pandas库,读取模块,代码笔记
日常数据清洗中,利用python清洗的第一步就是读取对应文件,今天一起复盘一下数据读取环节的常规操作. csv和xlsx格式读取类似,所以用csv做案例 X-MIND图