Как сгенерировать классы из wsdl с помощью Maven и wsimport?
Когда я пытаюсь запустить "mvn generate-sources", это мой вывод:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building gensourcesfromwsdl 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.104s
[INFO] Finished at: Tue Aug 20 15:41:10 BST 2013
[INFO] Final Memory: 2M/15M
[INFO] ------------------------------------------------------------------------
Я не получаю никаких ошибок, но не существует классов java, сгенерированных из файла wsdl.
Вот мой файл pom.xml, что я запускаю плагин против:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>gensourcesfromwsdl</groupId>
<artifactId>gensourcesfromwsdl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlLocation>http://mysite/firstwsdl.asmx?wsdl</wsdlLocation>
<packageName>com</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Что я делаю неправильно? Пакет com
существует в проекте "gensourcesfromwsdl" и допустимо местоположение wsdl.
Когда я запускаю wsimport
через командную строку: > wsimport -keep -verbose http://mysite/firstwsdl.asmx?wsdl
, генерируется класс.
Ответы
Ответ 1
Чтобы генерировать классы из WSDL, все, что вам нужно, это build-helper-maven-plugin и jaxws-maven-plugin в вашем pom.xml
Убедитесь, что вы поместили wsdl в папку src/main/resources/wsdl и соответствующую схему в src/main/resources/schema, запустите команду "mvn generate-sources" из корневого каталога Project.
C:/Project root directory > mvn generate-sources
сгенерированные классы Java могут находиться в папке
target/generated/src/main/java/com/raps/code/generate/ws.
pom.xml snippet
<basedir>
C:/Project root directory
</basedir>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/target/generated/src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<configuration>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<packageName>com.raps.code.generate.ws</packageName>
<keep>true</keep>
<sourceDestDir>${basedir}/target/generated/src/main/java</sourceDestDir>
</configuration>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
</plugin>
Ответ 2
Вот пример того, как создавать классы из wsdl с помощью jaxws maven-плагина из URL-адреса или из местоположения файла (из файла wsdl файла комментируется).
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
<plugins>
<!-- usage of jax-ws maven plugin-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>wsimport-from-jdk</id>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- using wsdl from an url -->
<wsdlUrls>
<wsdlUrl>
http://myWSDLurl?wsdl
</wsdlUrl>
</wsdlUrls>
<!-- or using wsdls file directory -->
<!-- <wsdlDirectory>src/wsdl</wsdlDirectory> -->
<!-- which wsdl file -->
<!-- <wsdlFiles> -->
<!-- <wsdlFile>myWSDL.wsdl</wsdlFile> -->
<!--</wsdlFiles> -->
<!-- Keep generated files -->
<keep>true</keep>
<!-- Package name -->
<packageName>com.organization.name</packageName>
<!-- generated source files destination-->
<sourceDestDir>target/generatedclasses</sourceDestDir>
</configuration>
</plugin>
</plugins>
</build>
Ответ 3
Попробуйте обернуть wsdlLocation в wsdlUrls
<wsdlUrls>
<wsdlLocation>http://url</wsdlLocation>
</wsdlUrls>
Ответ 4
Ключ здесь - сохранить опцию wsimport. И он настроен с использованием элемента в
О соблюдении документации wsimport:
-keep keep generated files
Ответ 5
У меня была такая же проблема при создании классов из цели wsimport. Вместо использования jaxws: цель wsimport в eclipse Maven Build я использовал чистую компиляцию, которая не смогла сгенерировать код из файла wsdl. Благодаря вышеприведенному примеру.
Запустите jaxws: wsimport цель из Eclipse ide и будет работать
Ответ 6
Даже если это немного поздний ответ, может быть полезно для кого-то. Похоже, вы использовали pluginManagement. Если вы используете pluginManagement
, он не выберет выполнение плагина.
Он должен находиться под
<build>
<plugins>
<plugin>