前缀JAXB生成的类

时间:2009-05-21 10:40:27

标签: jaxb xjc class-names

我有这个Maven“任务”使用JAXB从XSD文件生成Java类。

        <!-- 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)的类。但是,我还有一个名为“User”的JPA实体类(虽然在不同的包中)。 我可以更改上面的XML配置,让JAXB为生成的类添加类似“XML”的内容吗?

1 个答案:

答案 0 :(得分:21)

这是一个常见的要求。您可以通过提供额外的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文件放在构建目录中的某处,并告诉Maven在翻译期间使用它:

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

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