2

Spring Object-Xml マッピングを Jibx で使用して、一部の xsd ファイルを Java ソース ファイルに変換します。Jibx は、ビルド プロセスで jibx-maven-plugin によって呼び出されます。私のスキーマ ファイル (.xsd) には名前空間 "abcom" がありますが、Java コードの残りの部分がそのように編成されているため、生成された Java ソースをパッケージ "a.com" の下に配置したいと考えています。

Java パッケージは、xsd の名前空間に基づいて自動的に決定されることに気付きました。したがって、質問: 名前空間がスキーマ ファイルで定義されている場合に、Jibx Maven プラグインを使用する場合、xsd->Java 変換で出力 Java ソース ファイルの Java パッケージを設定することは可能ですか?

これまでに提案されたソリューション:

1) ビルド実行を使用する

以下提案。

問題:

  • xsd->Java 変換はビルドごとに実行されます。手動で実行したい、または xml スキーマを変更したときにのみ実行されます。
  • この設定では、customization.xml の prefer-inline 属性の動作が異なり、オブジェクト参照の属性がインライン化されます。

2) カスタマイズ xml を使用して Java パッケージを設定する

ここで提案: Jibx Codegen: カスタマイズ ファイル - スキーマごとのパッケージ

問題: 機能しませんでした。

3) モジュラー スキーマ

ここで提案: Jibx Maven プラグイン: 異なるビルド実行で変換されたときのスキーマ間の相互参照

問題: スキーマごとに 1 つの pom をセットアップし、スキーマごとに jar を生成し、その jar を他のスキーマにインポートするには複雑すぎます。

名前空間が xml スキーマで定義されているときに、これらの問題を解決し、xsd->Java 変換でカスタム Java パッケージを設定できた人はいますか?

前もって感謝します。

4

1 に答える 1

3

ドキュメントに基づいて、次のように実行できます。

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <configuration>
        <schemaLocation>src/main/conf</schemaLocation>
        <includeSchemas>
            <includeSchema>myschema.xsd</includeSchema>
        </includeSchemas>
        <options>
            <package>my.package</package>
        </options>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
        </execution>
    </executions>
</plugin>

ただし、複数の名前空間がある場合、生成されたソース内で衝突が発生する可能性があるため、xsd-namespace に由来するデフォルトの代わりにパッケージ名を使用する場合は注意が必要です。

複数の実行を定義して、異なるパッケージ名を持つ異なるスキーマを持つことができます。

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <executions>
        <execution>
            <id>schemata-a</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-a</schemaLocation>
              <includeSchemas>
                <includeSchema>myschema.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.a</package>
              </options>
            </configuration>
        </execution>
        <execution>
            <id>schemata-b</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-b</schemaLocation>
              <includeSchemas>
                <includeSchema>xyz.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.b</package>
              </options>
            </configuration>
        </execution>

    </executions>
</plugin>

xsd ファイルの名前空間を変更できれば、作業が楽になります。

于 2012-08-09T07:33:19.397 に答える