web-dev-qa-db-ja.com

WSDLからjaxb2-maven-pluginを使用してクラスを生成します

同じ標準ディレクトリjaxb2-maven-pluginにすべて存在するWSDLおよび複数のXSDファイルからJavaクラスを生成するようにsrc/main/xsdを構成するのに問題があります。

インラインXSDでjaxb2 mavenプラグインを使用する方法 は、回答がプラグイン構成でwsdlパラメーターの使用を正しく示唆しているという点でのみ関連していますが、その質問はインラインXSDとXSDは外部です。

プラグインの目標パラメーターは here にリストされています。

私のプラグイン構成は次のとおりです。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <packageName>com.x.y.model</packageName>
        <wsdl>true</wsdl>
    </configuration>
</plugin>

私はこれをmvn -X clean jaxb2:xjcでテストしていますが、プラグインはデバッグ出力に見られるように.wsdlを無視しています

[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd
17
andyb

JAXB XJCに渡される引数のMavenデバッグ出力(および少しの試行錯誤)を調べると、プラグインにさらに2つの構成パラメーターを提供する必要があることがわかりました。

これにより、XSDファイルのプラグインスキャンが停止され、.wsdlがソースとして使用されます。 XSDファイルは、WSDL as<xsd:include schemaLocation="datatypes.xsd" />ディレクティブに含まれています。たとえば、ローカルで解決され、WSDLからすべてのタイプが生成され、XSDがJavaクラスとして生成されます。

私のために働いた構成セクションは次のとおりです。

<configuration>
    <packageName>com.x.y.model</packageName>
    <wsdl>true</wsdl>
    <xmlschema>false</xmlschema>
    <schemaFiles>service.wsdl</schemaFiles>
</configuration>

<xmlschema>false</xmlschema> Mavenエラーなし:

org.Apache.maven.lifecycle.LifecycleExecutionException:ゴールの実行に失敗しましたorg.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc(default-cli)プロジェクトfoo:スキーマを処理できませんでした:/ c:/ projects/foo /src/main/xsd/service.wsdl

25
andyb

Wsdlとxsdを生成している場合、異なる実行構成を設定してください:同じschemaDirectoryを持たないか、2回目の実行でプラグインが正常に実行されない場合、この変数に基づいて実行をキャッシュします。私はそれをするようにアドバイスします

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>generate-sri-facturas</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri</outputDirectory>
                        <packageName>${commonsource.packageName}</packageName> 
                        <schemaDirectory>src/main/resources/schema/xsd</schemaDirectory>
                        <schemaFiles>factura_v1.1.0.xsd</schemaFiles>
                    </configuration> 
                </execution> 
                <execution>
                    <id>generate-sri-autorizacion-comprobantes</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory>
                        <packageName>${commonsource.packageName}.autorizacion</packageName>
                        <wsdl>true</wsdl>
                        <xmlschema>false</xmlschema>
                        <schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory>
                        <schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles>
                    </configuration> 
                </execution> 
            </executions> 
        </plugin> 

xsdおよびwsdlフォルダーを作成して、構成を分離しました。

6
EliuX

私が試してみました jaxb2-maven-plugin Javaファイルを生成します

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>src/main/webapp/schemas/</schemaDirectory>
                    <wsdl>true</wsdl>
                    <outputDirectory>src/main/Java</outputDirectory>
                </configuration>
            </plugin>

これを実行するには、コマンドを使用しました

mvn jaxb2:xjc

これを試してみると、srcフォルダにjaxbクラスが生成されます。あなたがこれを探していることを願っています。

3
Abhilash Ranjan

構成では次のコードを使用できます。

              <configuration>
                    <!-- Package to store the generated file -->
                    <packageName>com.example.demo.wsdl</packageName>
                    <!-- Treat the input as WSDL -->
                    <wsdl>true</wsdl>
                    <!-- Input is not XML schema -->
                    <xmlschema>false</xmlschema>
                    <!-- The WSDL file that you saved earlier -->
                    <schemaFiles>horarios.wsdl</schemaFiles>
                    <!-- The location of the WSDL file -->
                    <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
                    <!-- The output directory to store the generated Java files -->
                    <outputDirectory>${project.basedir}/src/main/Java</outputDirectory>
                    <!-- Don't clear output directory on each run -->
                    <clearOutputDir>false</clearOutputDir>
                </configuration>
1
J. Abel