目錄
- 第一章、起因
- 1.1)學習原因
- 1.2)提問的過程(逐步提出問題)
- 1、?wsdl鏈接的含義,有什么作用?
- 2、什么是wsdl文檔?
- 3、如何閱讀wsdl文件?
- 4、wsdl文件有什么作用?
- 5、什么是Web服務?Web Service是什么
- 6、如何使用wsdl文件生成Java代碼
- 7、生成Java代碼包含哪些內容?有什么作用
- 8、如何將生成的Java類集成到項目中,實現與Web服務的通信
- 9、如何調用生成的Java類中的方法?
- 第二章、學習過程(逐步解決問題過程)
- 2.1)什么是WSDL
- 2.1.1)WSDL鏈接的含義,有什么作用?
- 2.1.2)什么是wsdl文檔?
- 2.1.3)如何閱讀WSDL文檔?
- 2.2)Web Service技術
- 2.2.1)Web Service技術介紹
- 2.2.2)通過wsdl文件生成客戶端代碼(Java代碼)
- 2.2.3)生成Java代碼包含哪些內容?有什么作用
- 2.2.4)生成的Java類集成到項目中并訪問Web服務
- 2.3)如何調用生成的Java類中的方法?
- 第三章、
- 3.1)發送soap請求
- 3.2)
- 3.3)
- 第四章、
- 4.1)
- 4.2)
- 4.3)備注Axis 1.4依賴的jar包
友情提醒:
先看文章目錄,大致了解文章知識點結構,點擊文章目錄可直接跳轉到文章指定位置。
第一章、起因
1.1)學習原因
起因
領導啥也沒說,直接給了個wsdl地址,類似于下面這種后面拼個?wsdl:
http://127.0.0.1:8080/xxxx/hello?wsdl
1.2)提問的過程(逐步提出問題)
每個問題的詳細答案都在后面的文章中
1、?wsdl鏈接的含義,有什么作用?
簡單回答:返回WSDL描述文檔
2、什么是wsdl文檔?
簡單回答:一個xml格式的描述文檔,可以被用來生成客戶端代碼(Java代碼),以便與Web服務進行通信。
3、如何閱讀wsdl文件?
簡單回答:從下往上閱讀
4、wsdl文件有什么作用?
簡單回答:描述web服務,生產Java代碼
5、什么是Web服務?Web Service是什么
簡單回答:Web Service部署完后可以通過URL訪問Web服務
6、如何使用wsdl文件生成Java代碼
簡單回答:使用wsim命令
7、生成Java代碼包含哪些內容?有什么作用
簡單回答:在本地通過這些Java代碼(客戶端代碼)訪問調用遠程Web服務中的方法
8、如何將生成的Java類集成到項目中,實現與Web服務的通信
簡單回答:將生成的客戶端代碼復制到項目中,添加客戶端代碼需要的依賴包,編寫代碼調用服務。
9、如何調用生成的Java類中的方法?
第二章、學習過程(逐步解決問題過程)
2.1)什么是WSDL
2.1.1)WSDL鏈接的含義,有什么作用?
剛看到的時候比較懵,先嘗試訪問了一下這個鏈接http://127.0.0.1:8080/xxxx/hello?wsdl
,返回了一個WSDL文件,文件內容為XML格式:
2.1.2)什么是wsdl文檔?
WSDL是XML格式的文檔,有以下作用:
①標準化描述web服務
WSDL是用XML的語言來標準化描述Web服務的描述語言(Web Services Description Language的縮寫),文件內容為xml格式,以.wsdl
結尾。用于描述如何訪問特定的Web服務以及如何與其進行交互。包括web服務的具體功能接口(調用方式、輸入參數、輸出參數以及相關的消息格式)。
②發現可用的Web服務
描述Web服務的端點(endpoint)即客戶端可以訪問的服務位置,以及使用的通信協議和綁定信息。(可以將端口視為Web服務的端點)。
③定義通信協議和消息格式
描述客戶端和服務端之間交換的消息的結構和格式,以便雙方能夠理解和解析這些消息。對于分布式系統和跨平臺集成非常重要。
④生成客戶端代碼(Java代碼)
WSDL文檔可以用來生成客戶端代碼(Java代碼),以便與Web服務進行通信。
2.1.3)如何閱讀WSDL文檔?
WSDL文檔元素閱讀順序如下:從文檔最下放找到service節點然后按如下的順序往上看
元素介紹:1、服務(service)節點:定義了Web服務的具體網絡地址(Endpoint),也就是服務的URL。service標簽包含了服務端端口(port)屬性對應2、服務端口(port)節點:通常包含Binding屬性:將抽象操作映射到具體的通信協議和消息格式,例如SOAP協議。通過Binding屬性找到binding節點3、綁定(Binding):binding節點中包含具體的綁定信息,含有type屬性。通過type屬性找到相關聯的端口節點(portType)4、端口類型(PortType)節點:可以理解為一個類,一個接口。PortType里定義包含了多個操作(operation )節點5、操作(operation)節點: 相當于該類里有一個方法,name就是方法名稱。operation 包含了input節點,output節點,和fault節點(不常用)6、輸入輸出(Input和output)節點:input節點對應了Web服務的輸入消息即參數的定義。output節點對應了Web服務輸出消息即返回值的定義。他們有個屬性叫做message,通過message屬性找到對應message節點。7、消息(message)節點:描述了消息的組成部分,即消息的參數和類型。一個消息包含多個part節點可以傳遞一個或者多個參數。8、消息組成(part)節點:part是消息的組成部分,多個part組成一個消息。part包含屬性element對應(element)節點。9、元素(element)節點:定義了數據的類型。通過name屬性定義參數的名稱,通過type屬性定義參數的類型。
2.2)Web Service技術
2.2.1)Web Service技術介紹
Web Service是什么
是一項技術,能使得運行在不同機器上的不同應用無須借助第三方軟件或硬件, 就可相互交換數據或集成。依據Web Service規范實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什么, 都可以相互交換數據。
Web Service如何部署:
Web Service的部署通常需要遵循以下步驟:
①構建Web Service:編寫符合標準和規范的Web Service代碼,比如Java代碼
②打包Web Service:將Web Service打包成WAR文件或EAR文件。
③部署到Web容器:將打包好的Web Service部署到目標Web容器中(比如tomcat服務器,用于托管和運行Web應用程序的服務器環境,處理HTTP請求、執行Servlet和JSP等Web組件)
④驗證部署:通過相應的URL進行訪問Web服務,確保Web Service已經成功部署到Web容器。
2.2.2)通過wsdl文件生成客戶端代碼(Java代碼)
只要安裝了JDK1.6以上版本就可以通過wsimport命令使WSDL文件生成Java代碼(客戶端代碼)
以便客戶端可以訪問已發布的Web服務。wsimport命令是來自JAX-WS,它是JDK 1.6及以上版本的一部分。
示例:
wsimport -s D:\workspace\src -p main.java.com.tools -keep http://localhost:8080/HelloWorld?wsdl
-s選項:指定生成的Java源文件的絕對路徑,一般都是src結尾
-p選項:指定生成的Java代碼文件的目錄(生成代碼所在包名,也就是項目中src后面的目錄)
-keep選項:表示保留生成的Java源文件在指定的輸出目錄中,而不會將其刪除。
URL地址:是WSDL文件的地址。
2.2.3)生成Java代碼包含哪些內容?有什么作用
這些Java代碼包括用于調用服務的框架和類。這些生成的類將充當客戶端與服務端進行通信的接口。可以用于創建客戶端,在Java應用程序中調用遠程Web服務的方法,并處理返回的數據。
生成的Java代碼通常包括以下內容:
Service接口文件:包含了Web服務的方法定義和參數信息。通常以Service結尾,比如HelloWorldService.java。代表Web服務接口的Java接口
代表Web服務數據類型的Java類
代表Web服務方法的Java方法
如圖:
這些類和方法是根據wsdl文件中定義的服務、端點、操作和消息結構生成的,生成的Java代碼中包含了與SOAP協議相關的類和方法,可以幫助你構建符合SOAP協議要求的消息,并將這些消息發送到遠程服務端點。因此可以直接與遠程服務進行交互,調用遠程服務提供的操作,并獲取相應的響應數據。
2.2.4)生成的Java類集成到項目中并訪問Web服務
①將生成的Java類文件復制到項目的源代碼目錄中,通常是src/main/java/xxx/xx
②如果生成的Java類使用了其他依賴項。需要通過構建工具(如Maven或Gradle)的配置文件(例如pom.xml或build.gradle)來添加依賴。
③如果生成的Java類是用于與Web服務進行通信的客戶端代碼,需要編寫代碼來調用這些類,以實現與Web服務的交互。這可能涉及創建客戶端實例、調用Web服務的方法等操作。
import com.example.weather.Weather; // 導入生成的Java類public class WeatherClient {public static void main(String[] args) {// 創建Web服務客戶端實例Weather weatherService = new Weather();// 調用Web服務的方法String result = weatherService.getWeather("New York");// 處理返回結果System.out.println("Weather in New York: " + result);}
}
2.3)如何調用生成的Java類中的方法?
第三章、
3.1)發送soap請求
使用wsdl文件生成Java代碼后,通常需要發送SOAP請求。SOAP請求是一種基于XML的消息協議,用于在分布式應用程序之間進行通信。在生成的Java代碼中,通常會包含與SOAP請求相關的類和方法,以便你可以使用這些類和方法來構建和發送SOAP請求到特定的Web服務端點。SOAP請求通常包括對應的操作、輸入參數和其他必要的信息,以便與Web服務進行交互。
使用wsdl文件生成Java代碼后,怎么發送soap請求
回答
使用wsdl文件生成Java代碼后,你可以使用生成的Java類和方法來構建和發送SOAP請求。通常,你需要執行以下步驟:
創建一個SOAP消息:使用生成的Java類中的方法,創建一個符合要求的SOAP消息。
指定SOAP服務端點:設置SOAP消息的目標地址,即SOAP服務的端點地址。
發送SOAP請求:使用生成的Java類中的方法,將構建好的SOAP消息發送到指定的SOAP服務端點。
以下是一個簡單的示例代碼,演示如何使用生成的Java類發送SOAP請求:
// 創建一個實例
YourGeneratedService service = new YourGeneratedService();
YourGeneratedPortType port = service.getYourGeneratedPort();// 創建一個SOAP消息
YourRequestType request = new YourRequestType();
// 設置請求參數
request.setParam1("value1");
request.setParam2("value2");// 發送SOAP請求并獲取響應
YourResponseType response = port.yourOperation(request);
在這個示例中,YourGeneratedService和YourGeneratedPortType是根據wsdl文件生成的Java類,YourRequestType和YourResponseType是根據wsdl文件中定義的消息結構生成的Java類。yourOperation是根據wsdl文件中定義的操作生成的Java方法,用于發送SOAP請求并獲取響應。
3.2)
3.3)
第四章、
4.1)
4.2)
4.3)備注Axis 1.4依賴的jar包
Axis 1.4依賴的jar包,wsdl4j的包應該使用1.6.2
<!-- axis 1.4 jar start --><dependency><groupId>org.apache.axis</groupId><artifactId>axis</artifactId><version>1.4</version></dependency><dependency><groupId>commons-discovery</groupId><artifactId>commons-discovery</artifactId><version>0.2</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.axis</groupId><artifactId>axis-jaxrpc</artifactId><version>1.4</version></dependency><dependency><groupId>org.apache.axis</groupId><artifactId>axis-saaj</artifactId><version>1.4</version></dependency><dependency><groupId>wsdl4j</groupId><artifactId>wsdl4j</artifactId><version>1.6.2</version></dependency><!-- axis 1.4 jar end -->