一、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/zh-hant/n/333727.html