SpringBoot 整合WebService

文章目錄

    • WebService
      • 1.簡單介紹WebService
        • 1.1. 類型
        • 1.2. 架構
        • 1.3. 主要特點
        • 1.4. 使用場景
        • 1.5. Web服務標準和技術
      • 2.案例-WebServiceDemo
        • 2.1.引入配置文件
        • 2.2.創建接口
        • 2.3.創建接口實現類
        • 2.4.創建WebService配置類
        • 2.5.測試

WebService

Web服務(Web Services)是一種基于網絡的標準化的軟件系統,允許不同的應用程序通過網絡相互通信和交互。它們使用標準化的網絡協議和數據格式,使得不同平臺、不同語言編寫的應用程序能夠互相通信和交換數據。

在現代軟件開發中,構建可靠的Web服務是至關重要的。Apache CXF是一個功能強大的Java框架,用于構建Web服務和Web應用程序。結合Spring Boot,我們可以快速搭建一個簡單的WebService。本文將介紹如何使用Apache CXF和Spring Boot創建一個簡單的WebService,并進行基本的測試。

1.簡單介紹WebService

1.1. 類型

Web服務通常分為兩種主要類型:

  • SOAP Web服務:基于SOAP(Simple Object Access Protocol)協議的Web服務。SOAP是一種用于交換結構化信息的協議,它使用XML作為消息格式,并通常通過HTTP協議進行傳輸。
  • RESTful Web服務:基于REST(Representational State Transfer)原則的Web服務。RESTful服務使用標準的HTTP方法(如GET、POST、PUT、DELETE)來執行操作,并通常返回JSON或XML格式的數據。
1.2. 架構

Web服務的架構通常包括以下關鍵組件:

  • 服務提供者(Service Provider):提供Web服務的實體。它們發布服務并處理來自客戶端的請求。
  • 服務請求者(Service Requestor):使用Web服務的客戶端應用程序。它們向服務提供者發送請求并處理響應。
  • 服務描述(Service Description):Web服務的描述文件,通常使用WSDL(Web Services Description Language)或OpenAPI等格式來描述服務的接口和操作。
  • 消息格式(Message Format):Web服務使用的數據交換格式,通常是XML或JSON。
  • 通信協議(Communication Protocol):Web服務之間通信的協議,常見的包括HTTP、HTTPS、SMTP等。
1.3. 主要特點

Web服務具有以下主要特點:

  • 跨平臺性(Platform Independence):由于Web服務使用標準化的協議和數據格式,因此它們可以在不同的平臺和操作系統上運行。
  • 松耦合(Loose Coupling):Web服務通過標準化接口進行通信,服務提供者和請求者之間的耦合度較低,可以獨立開發和部署。
  • 可組合性(Composability):可以通過組合多個Web服務來創建復雜的應用程序。
  • 可重用性(Reusability):Web服務可以被多個應用程序重復使用,從而提高了軟件開發效率。
  • 易于維護(Maintainability):由于Web服務使用標準化的接口和協議,因此易于維護和更新。
1.4. 使用場景

Web服務在許多場景下都得到了廣泛應用,包括但不限于:

  • 企業應用集成(Enterprise Application Integration,EAI):將不同的企業應用程序和系統集成在一起,實現數據和業務流程的無縫交互。
  • 分布式系統:構建分布式系統和服務導向架構(Service-Oriented Architecture,SOA),提供跨網絡的服務和資源共享。
  • 移動應用程序開發:通過Web服務為移動應用程序提供數據和功能支持,與后端服務器進行通信和交互。
  • 云計算:在云平臺上部署和管理Web服務,提供云端服務和資源。
1.5. Web服務標準和技術

一些常見的Web服務標準和技術包括:

  • SOAP(Simple Object Access Protocol):用于構建基于XML的Web服務的協議。
  • WSDL(Web Services Description Language):用于描述Web服務的接口和操作的XML格式的語言。
  • UDDI(Universal Description, Discovery, and Integration):用于注冊和發現Web服務的協議和規范。
  • REST(Representational State Transfer):一種基于HTTP協議的軟件架構風格,用于構建RESTful Web服務。
  • JSON(JavaScript Object Notation):一種輕量級的數據交換格式,通常用于RESTful Web服務的數據格式。

2.案例-WebServiceDemo

2.1.引入配置文件

首先,我們需要在項目中添加必要的依賴項。這些依賴項將幫助我們集成Apache CXF到Spring Boot應用程序中。我的使用的是gradle構建的項目

    // 引入WebServiceimplementation 'org.apache.cxf:cxf-rt-frontend-jaxws:3.2.0'implementation 'org.apache.cxf:cxf-rt-transports-http:3.2.0'
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.2.0</version>
</dependency>
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.2.0</version>
</dependency>
2.2.創建接口
import com.fhr.student.entity.Student;
import javax.jws.WebParam;
import javax.jws.WebService;@WebService
public interface StudentService {/*** 根據姓名獲取學生信息* @param userName 學生姓名* @return 學生信息*/Student getStudentInfoByName(@WebParam(name = "userName")String userName);
}
2.3.創建接口實現類
import com.fhr.service.StudentService;
import com.fhr.student.entity.Student;
import org.springframework.stereotype.Component;import javax.jws.WebService;/*** targetNamespace:目標命名控件,一般由接口所在包路徑命名,不過是由里往外寫:比如:我接口所在路徑為:com.fhr.service 寫為:http://service.fhr.com/*/
@Component
@WebService(targetNamespace = "http://service.fhr.com/",endpointInterface = "com.fhr.service.StudentService")
public class StudentImpl implements StudentService {/*** 根據學生姓名獲取學生信息* @param userName 學生姓名* @return 學生信息*/@Overridepublic Student getStudentInfoByName(String userName) {// TODO這里應該查詢數據庫System.out.println("傳入的參數為:"+userName);Student student = new Student();student.setUserName(userName);student.setClassName("高三一班");student.setAge(14);return student;}
}
2.4.創建WebService配置類

我們需要配置CXF和發布WebService的端點。我們使用Spring Boot的配置類來完成這個任務。

import com.fhr.service.StudentService;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;@Configuration
public class WebServiceConfig {// 創建一個SpringBus Bean,作為Apache CXF的默認總線@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}// 注冊CXF Servlet,用于處理WebService請求@Bean(name = "wbsBean")public ServletRegistrationBean dispatcherServlet() {// 創建一個ServletRegistrationBean,將CXFServlet映射到指定路徑ServletRegistrationBean wbsServlet = new ServletRegistrationBean(new CXFServlet(), "/wbs/*");return wbsServlet;}// 定義WebService端點@Beanpublic Endpoint endpointPurchase(SpringBus springBus, StudentService studentService) {// 創建EndpointImpl對象,并將SpringBus和WebService實現類傳入EndpointImpl endpoint = new EndpointImpl(springBus, studentService);// 將端點發布到指定路徑endpoint.publish("/user-server");// 打印發布成功消息,顯示服務的訪問地址System.out.println("服務發布成功!地址為:http://localhost:8081/wbs/user-server");// 返回端點對象return endpoint;}
}
2.5.測試

啟動項目后,您可以在瀏覽器中輸入http://localhost:8081/wbs/user-server?wsdl來查看WebService的WSDL文檔。

# 啟動項目在瀏覽器的地址中輸入 http://localhost:8081/wbs/user-server?wsdl

image-20220509163821547

# 測試客戶端 為了方便直接在本地項目測試在瀏覽器中輸入 測試
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/stu")
public class StudentController {// 定義了一個映射到路徑"/stu/getUserInfoByName"的GET請求處理方法@GetMapping("/getUserInfoByName")public Object[] getUserInfoByName(@RequestParam("name")String name){// 創建JaxWsDynamicClientFactory實例,用于動態創建客戶端JaxWsDynamicClientFactory proxyFactoryBean =  JaxWsDynamicClientFactory.newInstance();// 使用動態客戶端工廠創建客戶端對象,并指定WebService的WSDL地址Client client = proxyFactoryBean.createClient("http://localhost:8081/wbs/user-server?wsdl");// 定義一個Object數組用于存儲調用WebService方法后的返回結果Object[] objects = new Object[0];// 調用遠程WebService方法try {// 調用客戶端的invoke方法,傳入方法名和參數,獲取WebService方法的返回結果objects = client.invoke("getStudentInfoByName", name);} catch (Exception e) {// 捕獲異常,打印異常信息e.printStackTrace();}// 返回WebService方法的返回結果return objects;}
}

image-20220509164055806

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713899.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年騰訊云優惠券/代金券領取三個方法整理(收藏級)

騰訊云代金券領取渠道有哪些&#xff1f;騰訊云官網可以領取、官方媒體賬號可以領取代金券、完成任務可以領取代金券&#xff0c;大家也可以在騰訊云百科蹲守代金券&#xff0c;因為騰訊云代金券領取渠道比較分散&#xff0c;騰訊云百科txybk.com專注匯總優惠代金券領取頁面&am…

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么?

CentOS系統上安裝幻獸帕魯/Palworld服務端的詳細步驟是什么&#xff1f; 首先&#xff0c;需要確認Docker是否已經安裝。如果未安裝&#xff0c;則需要進行安裝。接下來&#xff0c;運行Docker容器。這一步是為了創建一個可以運行幻獸帕魯服務端的環境。然后&#xff0c;在容器…

民爆5G智能制造工廠數字孿生可視化平臺,推進民爆工業數字化轉型

民爆5G工廠智能制造數字孿生可視化平臺&#xff0c;推進行業數字化轉型。民爆行業作為國家經濟發展的重要支柱產業&#xff0c;其數字化轉型對于提高生產效率、降低成本、保障安全等方面具有重要意義。而民爆5G工廠智能制造數字孿生可視化平臺正是推進行業數字化轉型的關鍵技術…

Flutter中Future和Stream關系

Future和Stream類是Dart異步編程的核心。 Future 表示一個不會立即完成的計算過程。與普通函數直接返回結果不同的是異步函數返回一個將會包含結果的 Future。該 Future 會在結果準備好時通知調用者。 Stream 是一系列異步事件的序列。其類似于一個異步的 Iterable&#xff0c;…

AutoEncoder和 Denoising AutoEncoder學習筆記

參考&#xff1a; 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 寫在前面&#xff1a; 只是直覺上的認識&#xff0c;并沒有數學推導。后面會寫一篇&#xff08;抄&#xff09;大一統文章&#xff08;概率角度理解為什么AE要選擇MSE Loss&#xff09; TOC 1 Au…

1907_Arm Cortex-M3的基本了解

1907_Arm Cortex-M3的基本了解 全部學習匯總&#xff1a; g_arm_cores: ARM內核的學習筆記 (gitee.com) 我發現Arm Coretex-M3有一個專門的DataSheet&#xff0c;看起來這個的確是被當做了一個設計的產品來對待的。正好&#xff0c;基于這個文件來看看M3具備哪些基本的特性&…

GO—變量

Go語言是靜態類型語言&#xff0c;因此變量&#xff08;variable&#xff09;是有明確類型的&#xff0c;編譯器也會檢查變量類型的正確性。 我們從計算機系統的角度來講&#xff0c;變量就是一段或者多段內存&#xff0c;用于存儲數據 1.1 標準格式 var 變量名 變量類型 1 …

vue 使用vue-scroller 列表滑動到底部加載更多數據

安裝插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

多層控制上身姿態的方法

1選擇要施加的clip并調出層控制窗口 2點選motion層控制 3選擇并復制pose&#xff08;注意在哪個層中選中的情況下復制的是那個層中的pose&#xff09; 4在新建層中分別選擇頭幀粘貼pose和尾幀粘貼pose因是上半身&#xff0c;因此mask中把下半身去掉即變灰

提升工作能力的方法

1.接受工作&#xff0c;只問標準 2.請示工作&#xff0c;必帶方案&#xff1b; 3.匯報工作&#xff0c;突出成果&#xff1b; 4.分享工作&#xff0c;細說流程&#xff1b; 5.復盤工作&#xff0c;總結SOP 如果能這么做&#xff0c;那將是一個非常通透的高手&#xff0c;所以高…

如何使用 takeUntil RxJS 操作符來聲明性地管理訂閱

簡介 Angular 處理取消訂閱可觀察對象的操作&#xff0c;比如從 HTTP 服務返回的可觀察對象或者使用 async 管道時。然而&#xff0c;對于其他情況&#xff0c;管理所有訂閱并確保取消長期存在的訂閱可能會變得困難。而且&#xff0c;取消大部分訂閱的策略也會帶來自己的問題。…

2024年春招小紅書前端實習面試題分享

文章目錄 導文面試重點一、方便介紹一下&#xff0c;你之前實習都做了什么嘛&#xff1f;二、 可以講一下封裝組件相關邏輯嘛&#xff1f;1. 為什么要封裝組件&#xff1f;2. 封裝組件的步驟3. 封裝組件的原則4. 組件的復用和擴展5. 組件的維護和文檔 三、項目的性能優化你有什…

python數據結構學習系列

在Python編程中&#xff0c;數據結構是組織、管理和存儲數據的方式&#xff0c;以便能夠有效地執行特定的操作。數據結構的選擇對于算法的效率、代碼的清晰度和可維護性都至關重要。以下是對Python中常見數據結構的學習總結。 列表&#xff08;List&#xff09; 列表是Python中…

selenium測試工具用來模擬用戶瀏覽器的操作

執行JS的類庫&#xff1a;execjs&#xff0c;PyV8&#xff0c;selenium&#xff0c;node pip list pip install selenium pip install xlrd pip install xlwt pip install PyExecJS pip install xlutils selenium測試工具可以用來模擬用戶瀏覽器的操作&#xff0c;其支持的瀏覽…

能當老板的AI大模型多智體框架MetaGPT自動完成項目

能當老板的AI大模型多智體框架MetaGPT自動完成項目。 MetaGPT是一個創新的多智能體框架&#xff0c;它結合了大語言模型&#xff08;LLM&#xff09;和多智能體協作系統&#xff0c;旨在通過模擬人類工作流程來解決復雜問題。這個框架的核心在于將標準化操作程序&#xff08;SO…

Redis學習路徑(構建體系)

學習路徑 掌握數據類型&#xff08;分析底層數據結構&#xff09;和緩存的基本使用 (理論使用) 掌握 redis 實現高性能&#xff0c;高可靠、高可用技術 &#xff08;理論&#xff09;學習redis源代碼底層實現 (底層實現) 先來一個引言&#xff0c;比較宏觀的角度&#xf…

Linux常用操作命令

Linux作為一種廣泛應用的操作系統&#xff0c;其強大的命令行工具使得用戶能夠高效地管理文件、處理數據和監控系統。在本文中&#xff0c;我們將深入 探討一些常用的Linux操作命令及其用法。 ls&#xff1a;列出當前目錄下的文件和子目錄。 ls [選項] [文件或目錄]常用選項&am…

Python實現MACD工具判斷信號:股票技術分析的工具系列(1)

Python實現MACD工具判斷信號&#xff1a;股票技術分析的工具系列&#xff08;1&#xff09; 介紹代碼rolling函數介紹核心代碼計算指數移動平均值計算MACD指標 完整代碼 介紹 先看看官方介紹&#xff1a; MACD (平滑異同平均線&#xff09; 指標說明 DIF線&#xff1a;收盤價短…

#單片機(TB6600驅動42步進電機)

1.IDE:keil 2.設備:保密 3.實驗&#xff1a;使用單片機通過普通IO口控制TB6600驅動42步進電機 4.時序圖&#xff1a; TB6600 ENA、ENA-DIR-、DIRPUL-、PULB-、BA、A-VCC、GND使能電機&#xff08;直接懸空不接&#xff09;方向脈沖輸入&#xff08;普通IO口模擬即可&#xff…

Linux系統編程7--線程 寫個測試腳本

Linux系統編程7–線程_寫個測試腳本 參考博客&#xff1a; Linux多線程編程初探 - 峰子_仰望陽光 - 博客園 (cnblogs.com) 我的PC是8核*16進程&#xff0c;所以在固定的時間點&#xff0c;我可以同時運行8 * 16的進程&#xff0c;更多的線程&#xff08;任務管理器&#xff09;…