2009-05-21 9 views
12

JAXBを使用してXSDファイルからJavaクラスを生成するために、このMavenの「タスク」があります。JAXBで生成されたクラスの接頭辞

 <!-- 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タイプが "User"の場合、 "User"(duh)という名前のクラスが生成されます。しかし、私はJPAエンティティクラス "User"(別のパッケージにもかかわらず)を持っています。 上記のXML設定を変更して、JAXBで生成されたクラスに "XML"のようなプレフィックスを付けることはできますか?

答えて

19

これは一般的な要件です。追加のJAXBバインディングファイルを用意して、JAXBがどのようにスキーマタイプ名をJavaクラス名に変換するかをカスタマイズすることで、これを行うことができます。

これらのファイルは通常、拡張子 ".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 \ user \ project")にJAXBが奇妙なエラーで転倒します。

+0

maven-jaxb2-pluginの設定では、 "includeBindings"と "includeBindings"ではなく "bindingIncludes"と "bindingInclude"というタグが必要です。 – kevinmrohr

関連する問題