使用 Gradle 生成 WSDL 存根
一、概述
簡單地說, Web 服務描述語言 (WSDL) 是一種基於 XML 的語言,用於描述 Web 服務提供的功能。 WSDL 存根是從 WSDL 文件生成的代理類,無需手動創建和管理 SOAP 消息就可以更輕鬆地與 Web 服務交互。
在本教程中,我們將學習如何使用 Gradle 生成 WSDL 存根。此外,我們還將看到一個示例 WSDL 文件並從中生成存根。
2. 示例設置
為了生成 begin,讓我們創建一個新的 Gradle 項目,該項目從 WSDL 文件生成 WSDL 存根。接下來,我們將為 WSDL 文件創建目錄結構:
$ mkdir -p src/main/resources/wsdl
我們將使用一個公共 WSDL 文件,該文件將數字轉換為其對應的單詞。讓我們下載 WSDL 文件並將其放在wsdl
文件夾中:
$ curl -o src/main/resources/wsdl/NumberConversion.wsdl https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL
上面的命令從dataacess.com
下載 WSDL 文件並將其放在指定的文件夾中。
在下一節中,我們將配置build.gradle
以生成我們可以在示例程序中與之交互的類。
3.搖籃配置
要從 WSDL 文件生成 Java 類,我們需要一個使用 Apache CXF 庫的插件。一個這樣的插件是com.github.bjornvester.wsdl2java
,我們將在本教程中使用它。這個插件簡化了這個過程,並允許我們配置gradle.build
:
plugins {
id 'java'
id("com.github.bjornvester.wsdl2java") version "1.2"
}
該項目需要兩個插件。 Java 插件幫助我們編譯代碼、運行測試和創建 JAR 文件。 WSDL 插件幫助我們從 WSDL 文件生成 Java 類。正如我們所知,WSDL 文件是描述 Web 服務的 XML 文檔。
我們可以使用wsdl2java
擴展配置 WSDL 插件:
wsdl2java {
// ...
}
此外,我們可以配置 CXF 版本:
wsdl2java {
cxfVersion.set("3.4.4")
}
默認情況下,該插件會為resources
文件夾中的所有 WSDL 文件創建存根。我們還可以將其配置為通過指定其位置為特定 WSDL 文件創建存根:
wsdl2java {
// ...
includes = [
"src/main/resources/wsdl/NumberConversion.wsdl",
]
// ...
}
此外,生成的類保存在build/generated/sources/wsdl2java
文件夾中,但我們可以通過指定我們自己的文件夾來覆蓋它:
wsdl2java {
// ...
generatedSourceDir.set(layout.projectDirectory.dir("src/generated/wsdl2java"))
// ...
}
在上面的代碼中,我們指定了在哪裡存儲生成的類,而不是使用默認文件夾。
配置完成後,我們需要運行 Gradle wsdl2java
命令來生成存根:
$ ./gradlew wsdl2java
上面的命令生成了 Java 類,我們現在可以在我們的程序中與它們交互。
4. 從 WSDL 文件生成 WSDL 存根
首先,讓我們檢查示例項目的build.gradle
文件:
plugins {
id 'java'
id("com.github.bjornvester.wsdl2java") version "1.2"
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.sun.xml.ws:jaxws-ri:4.0.1'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}
test {
useJUnitPlatform()
}
wsdl2java {
cxfVersion.set("3.4.4")
}
上面的示例代碼顯示瞭如何配置 WSDL 插件以使用 CXF 版本 3.4.4。該插件在默認位置生成存根,並在src/main/resources/wsdl.
這是我們之前放置 WSDL 文件的地方。
此外,我們需要 Java API for XML Web Services (JAX-WS)依賴項來與服務交互並執行單元測試。
要從 WSDL 文件生成 Java 類,我們可以執行 Gradle wsdl2java
命令:
$ ./gradlew wsdl2java
以下是生成的 Java 類:
生成的類存儲在默認位置。接下來,讓我們通過編寫單元測試來與類進行交互:
@Test
public void givenNumberConversionService_whenConvertingNumberToWords_thenReturnCorrectWords() {
NumberConversion service = new NumberConversion();
NumberConversionSoapType numberConversionSoapType = service.getNumberConversionSoap();
String numberInWords = numberConversionSoapType.numberToWords(BigInteger.valueOf(10000000));
assertEquals("ten million", numberInWords);
}
在上面的示例單元測試中,我們創建了一個新的NumberConversion
實例並調用service
對像上的getNumberConversionSoap()
方法以獲取對NumberConversionSoapType
對象的引用。
此外,我們調用numberConversionSoapType
上的numberToWords()
方法並將值1000000
作為參數傳遞。
最後,我們斷言期望值等於輸出。
5.結論
在本文中,我們學習瞭如何使用 Gradle 生成 WSDL 存根。此外,我們還了解瞭如何自定義插件配置,例如為生成的類指定 CXF 版本和輸出目錄。此外,我們還討論瞭如何通過編寫單元測試與生成的類進行交互。
與往常一樣,示例的完整源代碼可在 GitHub 上獲得。