【问题标题】:Prefixing JAXB generated classes为 JAXB 生成的类添加前缀
【发布时间】:2010-10-27 21:32:08
【问题描述】:

我有这个 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”之类的前缀吗?

【问题讨论】:

    标签: jaxb xjc class-names


    【解决方案1】:

    这是一个常见的要求。您可以通过提供额外的 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 将会出现奇怪的错误。

    【讨论】:

    • maven-jaxb2-plugin 配置需要标签“bindingIncludes”和“bindingInclude”,而不是“includeBindings”和“includeBinding”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2011-05-15
    • 1970-01-01
    • 2016-06-25
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多