Spring boot 整合CXF开发web service
来源:互联网 发布:爱上一个中国女人知乎 编辑:程序博客网 时间:2024/05/20 15:36
添加依赖
Maven的项目,首先当然是添加依赖了,除了原先Spring boot的依赖之外,还需要添加cxf依赖:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.6</version>
</dependency>
编写业务代码
这里我们以查询用户信息为例,创建一个自定义的User
对象:
public class User implements Serializable {
private static final long serialVersionUID = -5939599230753662529L;
private Long userId;
private String username;
private String email;
private Date gmtCreate;
//getter setter ......
}
接下来创建一个用于提供web service服务的用户接口,共两个方法getName
和getUser
,一个返回普通的String,一个返回自定义对象:
@WebService
public interface UserService {
@WebMethod
String getName(@WebParam(name = "userId") Long userId);
@WebMethod
User getUser(Long userId);
}
有接口当然要有业务代码实现了,这里我们只做简单的演示:
public class UserServiceImpl implements UserService {
private Map<Long, User> userMap = new HashMap<Long, User>();
public UserServiceImpl() {
User user = new User();
user.setUserId(10001L);
user.setUsername("liyd1");
user.setEmail("liyd1@qq.com");
user.setGmtCreate(new Date());
userMap.put(user.getUserId(), user);
user = new User();
user.setUserId(10002L);
user.setUsername("liyd2");
user.setEmail("liyd2@qq.com");
user.setGmtCreate(new Date());
userMap.put(user.getUserId(), user);
user = new User();
user.setUserId(10003L);
user.setUsername("liyd3");
user.setEmail("liyd3@qq.com");
user.setGmtCreate(new Date());
userMap.put(user.getUserId(), user);
}
@Override
public String getName(Long userId) {
return "liyd-" + userId;
}
@Override
public User getUser(Long userId) {
return userMap.get(userId);
}
}
发布服务
接口和业务代码我们都写完了,剩下的就是发布服务了,也就是Spring boot和cxf的整合。
其实这二者的整合十分的简单,比以前xml的方式更加的简洁,所有相关的代码如下:
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean dispatcherServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());
endpoint.publish("/user");
return endpoint;
}
}
可以看到从配置cxf到发布服务,都只需要一二行代码,出乎意料的简单吧?
到这里我们所有的操作就都完成了,启动Spring boot,访问 http://localhost:8080/soap/user?wsdl
可以看到有相关的wsdl描述信息输出了,说明服务已经发布了。
调用服务
发布了web service服务,那怎么调用呢,像整合一些第三方接口也是先有调用才后有发布啊?
调用soap web service,一般的方法是根据wsdl生成客户端代码,整合之后就可以像调用本地接口一样使用了。
但是我个人不怎么喜欢这种方式,每个接口都要生成一次还有一堆的代码,感觉比较麻烦。
相对更喜欢传入方法名调用的方式,显得清爽而简洁,以下就是所有代码了:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:8080/soap/user?wsdl");
Object[] objects = client.invoke("getUser", 10002L);
//输出调用结果
System.out.println(objects[0].getClass());
System.out.println(objects[0].toString());
这种方式要注意的就是,如果调用的服务接口返回的是一个自定义对象,那么结果Object[]
中的数据类型就成了这个自定义对象(组件帮你自动生成了这个对象),
但是你本地可能并没有这个类,所以需要自行转换处理,最简单的是新建一个跟返回结果一模一样的类进行强转,当然更好的方式是封装一个通用的,这个不是本文主题就不在这深入讨论了。
- Spring boot 整合CXF开发web service
- Spring boot 整合CXF开发web service
- Spring boot 整合CXF开发web service
- Spring boot 整合CXF开发web service
- Spring Boot整合spring-ws开发web service
- CXF [web service]整合spring 总结
- Spring Boot、Mybatis框架整合开发Java RESTful Web Service
- Spring boot 整合CXF开发webService
- 用cxf+spring开发web service
- Web Service ---- CXF + SPRING 开发 SOAP服务
- cxf和spring开发web service--服务器端
- spring整合web service - 基于apache CXF实现
- 简单WEB Service接口实现(CXF与spring整合)
- 9.Web Service Spring整合CXF之发布服务
- 基于 Spring 整合 CXF 的 Web Service 超时时间配置
- Spring Boot整合spring-ws调用web service服务
- WEB开发----spring boot与mybatis整合
- CXF-09: CXF 与 Spring 的整合 之 暴露 Web Service 接口
- tomcat配置字符集防止ajax提交乱码
- Artifact Project3:war exploded: Error during artifact deployment. See server log for details.
- TypeScript介绍
- iOS 关于dispatch_semaphore_t、dispatch_source_t 和 dispatch_group_t 的简单实用,用于多网络异步回调通知
- 资料汇总-学习笔记1
- Spring boot 整合CXF开发web service
- java.util.concurrent 之 Condition
- android触摸事件分发与处理简述
- JAVA_方法_输入两个数打印他们的和差积商
- iPhone X home指示键适配
- java 调用 本地命令Ping 实例
- android App使用360加固,walle多渠道打包
- linux 开机自动连接网络
- Linux文件透明加解密