一、WebService概述
WebService是一种跨平台、跨语言的技术,指的是利用Web协议进行通信而不限于HTTP协议。WebService提供了一种将应用程序连接在一起的简单方法,其主要作用是实现分布式计算。在远程调用过程中,WebService提供了基于HTTP的标准协议(SOAP、XML-RPC、RESTful),这样两个不同的应用程序之间就可以通过网络来相互调用。
使用WebService,可以实现系统与系统之间的互联。在实际工作中,我们可能需要将一些处理好的数据或结果给其他系统使用,将自己的服务通过WebService发布出去,供其他系统可以方便的调用。SpringBoot是一个优秀的Java开发框架,它可以轻松地将代码整合为一个可单独运行的Jar包,并且提供了丰富的集成方案。接下来,我们将会学习如何在SpringBoot中整合WebService。
二、WebService工作原理
在WebService的标准协议中,最常使用的是SOAP(Simple Object Access Protocol,简单对象访问协议),它是一种基于XML的消息协议。WEB SERVICES的服务端将数据返回给客户端时,全部数据以XML形式返回。因此,开发这样的应用需要学会使用XML。
WebService的工作流程:
- 客户端请求调用WebService服务;
- WebService服务接收到请求后,根据请求的参数进行处理并生成XML格式的相应报文;
- WebService服务将生成的XML格式的响应报文发送给客户端;
- 客户端接收到响应报文后进行解析并处理。
三、在SpringBoot中集成WebService
1. 生成WebService代码
要在SpringBoot中整合WebService,我们需要在项目中生成WebService代码。我们可以使用Eclipse中的Web Service Client或者使用CXF的wsdl2java工具来生成代码。
1) 使用Eclipse中的Web Service Client生成代码:
public class UserServiceClient {
private UserServicePortType service;
public UserServiceClient() {
try {
//1.创建一个服务(service)调用(Services)
UserService service = new UserService();
//2.获取服务的实现类(UserServiceImpl)
this.service = service.getUserServiceImplPort();
} catch (Exception e) {
e.printStackTrace();
}
}
//调用服务端的getUserById方法
public void getUserById(Long id) {
//3.调用服务端方法
String user = service.getUserById(id);
System.out.println(user);
}
public static void main(String[] args) {
new UserServiceClient().getUserById(1L);
}
}
2) 使用CXF的wsdl2java工具生成代码:
public class WebServiceTest {
public static void main(String[] args) {
//调用WebService
//1.创建工厂,指定WebService服务地址
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setAddress("http://localhost:8080/Webservices/userService?wsdl");
//2.设置接口类型
factoryBean.setServiceClass(UserService.class);
//3.对接口生成代理对象
UserService userService = (UserService) factoryBean.create();
//4.调用接口方法
String user = userService.getUserById(1L);
System.out.println(user);
}
}
2. 配置WebService参数
使用SpringBoot整合WebService,需要在application.properties中配置WebService相关参数,例如:
#设置WebService地址 webservice.address=http://localhost:8090/Webservices #设置WebService命名空间 webservice.namespace=urn:webservice #设置WebService服务接口路径 webservice.path=/userService
3. 发布WebService服务
使用SpringBoot发布WebService服务,需要创建一个类并使用Endpoint类进行发布。Endpoint类是WebService API中的核心类,提供了发布WebService服务、接收客户端请求等功能。我们可以在应用启动时自动发布WebService服务,代码示例如下:
@Configuration
public class WebServiceConfig {
@Autowired
private UserService userService;
//通过Endpoint发布WebService
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(BusFactory.getDefaultBus(), userService);
endpoint.publish("/userService");
return endpoint;
}
}
4. 客户端调用WebService服务
客户端调用WebService可以使用Java的标准SOAP方式,也可以使用CXF提供的接口。CXF提供了两种方式,一种是使用Wsdl2Java生成的代理类,一种是使用JaxWsProxyFactoryBean动态代理。
使用CXF的Wsdl2Java工具生成代理类:
public class StudentClient {
public static void main(String[] args) {
//创建服务类
StudentService studentService = new StudentService();
//获取WebService实现类
StudentServiceImpl studentServiceImpl = studentService.getStudentServiceImplPort();
//调用WebService方法
String result = studentServiceImpl.getStudentInfo("1");
System.out.println(result);
}
}
使用JaxWsProxyFactoryBean动态代理:
public class StudentClient {
public static void main(String[] args) {
//创建JaxWsProxyFactoryBean
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
//设置WebService请求地址
factoryBean.setAddress("http://localhost:8080/StudentService");
//设置WebService接口类型
factoryBean.setServiceClass(StudentService.class);
//通过代理类获取实现类对象
StudentService studentService = (StudentService) factoryBean.create();
//调用WebService方法
String result = studentService.getStudentInfo("1");
System.out.println(result);
}
}
四、总结
本文主要介绍了如何在SpringBoot中整合WebService,我们可以通过SpringBoot的自动配置特性来完成WebService的发布和调用,使得开发变得更加便捷快速。我们可以通过生成客户端代理类和调用WebService服务来实现系统间的互联和数据共享,提高开发效率和系统的可维护性。
原创文章,作者:OEZNQ,如若转载,请注明出处:https://www.506064.com/n/333727.html
微信扫一扫
支付宝扫一扫