質問

私はJAXBを使用してXSDファイルからJavaクラスを生成するには、このMavenの "タスク" を持っています。

        <!-- XML to Java classes -->
        <plugin>
            <groupId>com.sun.tools.xjc.maven2</groupId>
            <artifactId>maven-jaxb-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>nl.compay.service</generatePackage>
                <schemaDirectory>src/main/webapp/compay</schemaDirectory>
            </configuration>
        </plugin>

XSDタイプについては、「ユーザー」は、「ユーザー」(当たり前)という名前のクラスを生成します。しかし、私はまた、(異なるパッケージでも)「ユーザー」と呼ばれるJPAエンティティクラスを持っています。 私は、JAXBは、「XML」?

のようなもので生成されたクラスの前に付けるようにする上記のXML設定を変更することができます
役に立ちましたか?

解決

これは一般的な要件です。あなたは、JAXBは、Javaクラス名にスキーマタイプ名を変換する方法をカスタマイズするために追加のJAXBバインディングファイルを提供することにより、それを行うことができます。

これらのファイルは通常、拡張子「.xjb」で終わります。あなたは、たとえば、スキーマのための1つを作成する必要があります:

<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
  jxb:extensionBindingPrefixes="xjc">

    <jxb:bindings schemaLocation="nl.company.service.xsd" node="/xs:schema">
        <jxb:schemaBindings>
            <jxb:nameXmlTransform>
                <jxb:typeName prefix="XML"/>
                <jxb:anonymousTypeName prefix="XML"/>
            </jxb:nameXmlTransform>
        </jxb:schemaBindings>
    </jxb:bindings>

</jxb:bindings>
あなたはそれをやった後は、

、ビルドディレクトリのどこかにXJBファイルをドロップすると、翻訳中にそれを利用するためにMavenを教えます:

<includeBindings>
    <includeBinding>mybindings.xjb</includeBinding>
</includeBindings>

そして、ここでは、道路のためのヒントです:あなたは、スペース(例えば「のDocuments and Settings \ユーザー\プロジェクト」)を含むパスであるならば、JAXBは奇妙なエラーで倒れます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top