基於現階段的Demo項目整理的CXF開發服務端與客戶端的基本步驟與解析。java
WebService1. 基於Web的服務:服務器端整出一些資源讓客戶端應用訪問(獲取數據)web
2. 抽象的說,是一個跨語言、跨平臺的規範spring
3. 實際的說,是多個跨平臺、跨語言的應用間通訊整合的方案apache
以各個網站顯示天氣預報功能爲例: 服務器
氣象中心的管理系統將收集的天氣信息並將數據暴露出來(經過WebService Server), 而各大站點的應用就去調用它們獲得天氣信息並以不一樣的樣式去展現(WebService Client)。網站提供了天氣預報的服務,但其實它們什麼也沒有作,只是簡單了調用了一下氣象中心服務器上的一個服務接口而已。框架
4. WebService的優勢:可以解決跨平臺,跨語言,以及遠程調用之間的問題。frontend
5. WebService的應用場合ssh
a. 同一家公司的新舊應用之間maven
b. 不一樣公司的應用之間,例如電商和物流之間的應用相互調用ide
c.一些提供數據的內容聚合應用:天氣預報、股票行情
幾個重要術語
1.WSDL(web service definition language)
webservice定義語言, 對應.wsdl文檔, 一個webservice會對應一個惟一的wsdl文檔, 定義了客戶端與服務端發送請求和響應的數據格式和過程。
2.SOAP(simple object access protocal)
一種簡單的、基於HTTP和XML的協議, 用於在WEB上交換結構化的數據,在webservice中分爲請求消息和響應消息。
3.SEI(WebService EndPoint Interface)
webService服務器端用來處理請求的接口
4.CXF(Celtix + XFire)
一個apache的用於開發webservice服務器端和客戶端的框架
組成:一、服務端開發
二、客戶端開發
首先說明開發步驟,而後詳細解析。
開發步驟:
解析(對應開發步驟):
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.5</version> </dependency>
@WebService 此註解用來標明此java類定義了personWebService的接口
@Service 註解表示會被spring管理,自動註冊到spring容器中
@WebService(endpointInterface ="cn.yangjieyu.service.PersonService")
endpointInterface屬性是指服務接口全路徑, 指定作SEI(Service EndPoint Interface)服務端點接口
@Component("personServiceImpl")
表示這個類是一個組件,會被spring管理
Jaxws:endpoint標籤訂義了提供服務者,address屬性表示具體的接口路徑。
jaxws:inInterceptors和jaxws:outInterceptors指系統日誌的入攔截器和出攔截器。
訪問地址:http://localhost:8080/ssh2/webservice/,能夠看到Available SOAP services.
能夠點擊上圖中對應的WSDL訪問具體WebService接口。 效果以下:
下面是Demo主類,不在本項目中
發佈WebService的Demo主類以下:
package com.fzhiy.webservice; import com.fzhiy.webservice.impl.HelloWorldImpl; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; public class Server { public static void main(String[] args) { System.out.println("web service start"); HelloWorld implementor = new HelloWorldImpl(); String address = "http://localhost:8082/helloWorld"; // Endpoint.publish(address, implementor); // JDK實現 JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); factoryBean.setAddress(address); // 設置暴露地址 factoryBean.setServiceClass(HelloWorld.class); // 接口類 factoryBean.setServiceBean(implementor); // 設置實現類 // 添加請求消息攔截器 factoryBean.getInInterceptors().add(new LoggingInInterceptor()); // 添加響應消息攔截器 factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); factoryBean.create(); System.out.println("web service started"); } }
這裏簡述開發步驟:
隨後在項目中生成了相應代碼
4.編寫主類,運行