«1. Введение

В этом руководстве мы покажем, как настроить подключаемый модуль JAX-WS maven для создания классов Java из файла WSDL (языка описания веб-сервисов). В результате мы сможем легко вызывать веб-сервисы, используя сгенерированные классы.

2. Настройка нашего плагина Maven

Во-первых, давайте включим наш плагин JAX-WS Maven с целью wsimport в раздел плагинов сборки нашего файла pom.xml:

<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 и создает все необходимые артефакты для разработки, развертывания и вызова веб-службы.

2.1. Конфигурация каталога WSDL

В нашем разделе подключаемых модулей Maven свойство конфигурации wsdlDirectory сообщает подключаемому модулю, где расположены наши файлы WSDL. В этом примере мы скажем подключаемому модулю получить все файлы WSDL в каталоге src/main/resources нашего проекта:

<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. Конфигурация URL-адресов WSDL

В качестве альтернативы мы можем настроить свойство конфигурации wsdlUrl плагина:

<plugin>
    ...
    <configuration>
        <wsdlUrls>
            <wsdlUrl>http://localhost:8888/ws/country?wsdl</wsdlUrl>
        ...
        </wsdlUrls>
    </configuration>
</plugin>

Чтобы использовать эту опцию, сервер, на котором размещается URL-адрес для файла WSDL, должен быть запущен и работать, чтобы наш плагин мог его прочитать.

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. Проверка сгенерированных классов

После запуска нашего плагина мы можем проверить вывод в папке target/generated-sources, настроенной в свойстве sourceDestDir.

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

Сгенерированные классы можно найти в com.baeldung.soap.ws.client, как настроено в свойстве packageName:

5. Заключение

В этой статье мы увидели, как генерировать классы Java из файл WSDL с помощью подключаемого модуля JAX-WS. В результате теперь мы можем создать клиент веб-службы и использовать сгенерированные классы для вызова наших служб.