web-dev-qa-db-ja.com

Mavenとwsimportを使用してwsdlからクラスを生成する方法は?

「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] ------------------------------------------------------------------------

エラーは表示されませんが、wsdlファイルから生成されるJavaクラスはありません。

プラグインを実行している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クラスが生成されます。

30
blue-sky

WSDLからクラスを生成するために必要なのは、pom.xmlのbuild-helper-maven-pluginおよびjaxws-maven-pluginです
wsrcをフォルダーsrc/main/resources/wsdlおよびsrc/main/resources/schemaの対応するスキーマの下に配置したことを確認し、プロジェクトルートディレクトリからコマンド「mvn generate-sources」を実行します。

C:/Project root directory > mvn generate-sources

生成されたJavaクラスはフォルダの下に配置できます

target/generated/src/main/Java/com/raps/code/generate/ws.

pom.xmlスニペット

<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>
36

URLまたはファイルの場所(wsdlファイルの場所はコメント化されています)からjaxws mavenプラグインを使用して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>  
26
Cassian

これは少し遅い応答ですが、誰かに役立つかもしれません。 pluginManagementを使用したように見えます。 pluginManagementを使用する場合、プラグインの実行は選択されません。

下にあるはずです

<build>
<plugins>           
        <plugin> 
4
Midhun

WsdlUrlsでwsdlLocationをラップしてみてください

            <wsdlUrls>
                <wsdlLocation>http://url</wsdlLocation>
            </wsdlUrls>
3

Jaxws-maven-pluginを介してターゲットにソースを生成し、build-helper-maven-pluginを介してこのクラスをソースで表示することを好む人もいます。この構造の引数として

バージョン管理システム(svn/etc。)は常にソースの変更に気づくでしょう

Gitでは、それは正しくありません。したがって、単にjaxws-maven-pluginをソースに入れますが、ターゲットフォルダの下には入れません。次回プロジェクトをビルドするとき、gitはこれらの生成されたファイルを変更済みとしてマークしません。プラグインが1つだけの簡単なソリューションを次に示します。

      <plugin>
        <groupId>org.jvnet.jax-ws-commons</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.3</version>

    <dependencies>
      <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-fluent-api</artifactId>
        <version>3.0</version>
      </dependency>
      <dependency>
        <groupId>com.Sun.xml.ws</groupId>
        <artifactId>jaxws-tools</artifactId>
        <version>2.3.0</version>
      </dependency>
    </dependencies>

    <executions>
      <execution>
        <goals>
          <goal>wsimport</goal>
        </goals>
        <configuration>
          <packageName>som.path.generated</packageName>
          <xjcArgs>
            <xjcArg>-Xfluent-api</xjcArg>
          </xjcArgs>
          <verbose>true</verbose>
          <keep>true</keep> <!--used by default-->
          <sourceDestDir>${project.build.sourceDirectory}</sourceDestDir>
          <wsdlDirectory>src/main/resources/META-INF/wsdl</wsdlDirectory> 
        </configuration>
      </execution>
    </executions>
  </plugin>

また、この例では(注意するために)SOAPクラスはFluent APIで生成されるため、次のように作成できます。

A a = new A()
  .withField1(value1)
  .withField2(value2);
2
Alexandr

ここで重要なのは、wsimportのkeepオプションです。そして、それはwsimportドキュメントのkeepについての要素を使用して設定されます:

-keep                     keep generated files
0
Gaurav

私はwsimportゴールからクラスを生成しているときに同じ問題を抱えていました。 Eclipse Maven Build iでjaxws:wsimportゴールを使用する代わりに、wsdlファイルからコードを生成できなかったクリーンコンパイルインストールを使用していました。上記の例に感謝します。 Eclipse IDEからjaxws:wsimportゴールを実行すると動作します

0
Waqas Ahmed