2009-05-21 46 views
12

我有这个Maven“任务”从XSD文件使用JAXB生成Java类。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”的JPA实体类(尽管在不同的包中)。 我可以更改上面的XML配置,让JAXB为生成的类添加类似“XML”的类吗?

回答

19

这是一个常见的要求。您可以通过提供额外的JAXB绑定文件来定制JAXB如何将Schema类型名称转换为Java类名称。

这些文件通常以扩展名“.xjb”结尾。您需要创建一个为您的架构,例如:

<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文件在你的build目录,并告诉Maven的转换过程中使用它:

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

这里有一条道路:如果你在一个包含空格的路径中(例如“Documents and Settings \ user \ project”),那么JAXB将会出现奇怪的错误。

+0

maven-jaxb2-plugin配置需要标签“bindingIncludes”和“bindingInclude”,而不是“includeBindings”和“includeBinding” – kevinmrohr 2012-10-29 16:40:35