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