Java 使用binding.xml重命名JAXB根类

Java 使用binding.xml重命名JAXB根类,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我使用Eclipse中的Dali插件使用xsd文件生成Java类,xsd文件实质上只调用模式文件上的xjc。我使用该建议通过将XML绑定文件应用于类生成来解决命名冲突。这很有效,但我试图通过重命名根元素来进一步改进,结果是丢失了XmlRootElement注释。我尝试使用annox将根元素注释添加回,但出现以下错误:不支持的绑定命名空间“”。也许你的意思是“” 这是我的初始binding.xml文件(不带annox): 顺便说一下,值得注意的是,模式文件来自第三方,所以我对修改它没有兴趣。同

我使用Eclipse中的Dali插件使用xsd文件生成Java类,xsd文件实质上只调用模式文件上的xjc。我使用该建议通过将XML绑定文件应用于类生成来解决命名冲突。这很有效,但我试图通过重命名根元素来进一步改进,结果是丢失了XmlRootElement注释。我尝试使用annox将根元素注释添加回,但出现以下错误:不支持的绑定命名空间“”。也许你的意思是“”

这是我的初始binding.xml文件(不带annox):


顺便说一下,值得注意的是,模式文件来自第三方,所以我对修改它没有兴趣。同样,我不希望篡改生成的Java文件,因此我对绑定xml方法感兴趣

编辑(2013年9月11日)-以下是使用annox绑定XML:

<jaxb:bindings xmlns:jaxb="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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    xmlns:annox="http://annox.dev.java.net"
    version="2.1">
    <!-- Force all classes to be generated at the top level, this will potentially cause name conflicts -->
    <jaxb:globalBindings localScoping="toplevel"/>
    <jaxb:bindings schemaLocation="mySchema-1.0.0.xsd">
        <!-- Rename the root element -->
        <jaxb:bindings node="//xs:element[@name='MyRootClassNameIsReallyLong']/xs:complexType">
            <jaxb:class name="ShorterName"/>
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="MyRootClassNameIsReallyLong" />
            </annox:annotate>
        </jaxb:bindings>
        <!-- Rename the Bar class to resolve a naming conflict -->
        <jaxb:bindings node="//xs:element[@name='Foo']/xs:complexType/xs:sequence/xs:element[@name='Bar']/xs:complexType">
            <jaxb:class name="FooBar"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

Annox是一个XJC附加组件,因此除了声明名称空间prefx(
xmlns:Annox=)http://annox.dev.java.net
),您还需要将其声明为
扩展绑定前缀

然后,您的打开标记应如下所示:

<jaxb:bindings xmlns:jaxb="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"                 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb 
                                   http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
               jaxb:extensionBindingPrefix="annox"
               version="2.1">


你能用annox显示你的绑定文件吗?我之前有过类似的东西,但我不得不把它取出来,因为Eclipse给了我以下错误:cvc复杂类型。3.2.2:属性“jaxb:extensionBindingPrefix”不允许出现在元素“jaxb:bindings”中。你是否将xjc编译器的
extension
选项设置为true问题中提到,我正在使用Dali Eclipse插件生成XML。我所指的错误是以红色曲线的形式出现的。你知道如何让Eclipse在这里快乐吗?此外,我不相信annox是活跃的,因为在浏览器中执行任何操作都不会返回任何结果。
<jaxb:bindings xmlns:jaxb="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"                 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb 
                                   http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
               jaxb:extensionBindingPrefix="annox"
               version="2.1">