使用Maven生成WSDL存根

1.簡介

在本教程中,我們將展示如何配置JAX-WS maven插件以從WSDL(Web服務描述語言)文件生成Java類。結果,我們將能夠使用生成的類輕鬆調用Web服務。

2.配置我們的Maven插件

pom.xml文件的build plugins部分中將wsimport目標的JAX-WS Maven插件包括在內:

<build>

 <plugins>

 <plugin>

 <groupId>org.codehaus.mojo</groupId>

 <artifactId>jaxws-maven-plugin</artifactId>

 <version>2.6</version>

 <executions>

 <execution>

 <goals>

 <goal>wsimport</goal>

 </goals>

 </execution>

 </executions>

 </plugin>

 </plugins>

 </build>

簡而言之, wsimport目標生成用於JAX-WS客戶端和服務的JAX-WS可移植工件。該工具讀取WSDL文件並生成Web服務開發,部署和調用所需的所有工件。

2.1。 WSDL目錄配置

在我們的Maven插件部分中, wsdlDirectory配置屬性會通知插件WSDL文件所在的位置。在此示例中,我們將告訴插件在項目的src/main/resources目錄中獲取所有WSDL文件:

<plugin>

 ...

 <configuration>

 <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>

 </configuration>

 </plugin>

2.2。 WSDL目錄特定的文件配置

另外,我們可以使用wsdlFiles配置屬性來定義生成類時要考慮的WSDL文件列表:

<plugin>

 ...

 <configuration>

 <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>

 <wsdlFiles>

 <wsdlFile>file1.wsdl</wsdlFile>

 <wsdlFile>file2.wsdl</wsdlFile>

 ...

 </wsdlFiles>

 </configuration>

 </plugin>

但是,如果wsdlFiles屬性,則將考慮wsdlDirectory屬性指定的目錄中的所有文件

2.3。 WSDL URL配置

或者,我們可以配置插件的wsdlUrl配置屬性:

<plugin>

 ...

 <configuration>

 <wsdlUrls>

 <wsdlUrl>http://localhost:8888/ws/country?wsdl</wsdlUrl>

 ...

 </wsdlUrls>

 </configuration>

 </plugin>

要使用此選項,託管WSDL文件URL的服務器必須已啟動並正在運行,以便我們的插件可以讀取它

2.4。配置生成的類目錄

接下來,在packageName屬性中,我們可以設置生成的類的包名稱,並在sourceDestDir ,設置輸出目錄:

<plugin>

 ...

 <configuration>

 <packageName>com.baeldung.soap.ws.client</packageName>

 <sourceDestDir>

 ${project.build.directory}/generated-sources/

 </sourceDestDir>

 </configuration>

 </plugin>

wsdlDirectory選項的插件配置的最終版本為:

<plugin>

 <groupId>org.codehaus.mojo</groupId>

 <artifactId>jaxws-maven-plugin</artifactId>

 <version>2.6</version>

 <executions>

 <execution>

 <goals>

 <goal>wsimport</goal>

 </goals>

 </execution>

 </executions>

 <configuration>

 <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>

 <packageName>com.baeldung.soap.ws.client</packageName>

 <sourceDestDir>

 ${project.build.directory}/generated-sources/

 </sourceDestDir>

 </configuration>

 </plugin>

3.運行JAX-WS插件

最後,配置好我們的插件後,我們可以使用Maven生成我們的類並檢查輸出日誌:

mvn clean install
[INFO] --- jaxws-maven-plugin:2.6:wsimport (default) @ jaxws ---

 [INFO] Processing: file:/D:/projetos/baeldung/tutorials/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl

 [INFO] jaxws:wsimport args: [-keep, -s, 'D:\projetos\baeldung\tutorials\maven-modules\maven-plugins\jaxws\target\generated-sources', -d, 'D:\projetos\baeldung\tutorials\maven-modules\maven-plugins\jaxws\target\classes', -encoding, UTF-8, -Xnocompile, -p, com.baeldung.soap.ws.client, "file:/D:/projetos/baeldung/tutorials/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl"]

 parsing WSDL...

 Generating code...

4.檢查生成的類

運行插件後,我們可以檢查sourceDestDir屬性中target/generated-sources中的輸出。

生成的類中可以找到com.baeldung.soap.ws.client作為已配置packageName屬性:

com.baeldung.soap.ws.client.Country.java

 com.baeldung.soap.ws.client.CountryService.java

 com.baeldung.soap.ws.client.CountryServiceImplService.java

 com.baeldung.soap.ws.client.Currency.java

 com.baeldung.soap.ws.client.ObjectFactory.java

5.結論

在本文中,我們看到瞭如何使用JAX-WS插件從WSDL文件生成Java類。結果,我們現在能夠創建一個Web服務客戶端,並使用生成的類來調用我們的服務。