当前位置: 首页 > 知识库问答 >
问题:

使用binding.xml重命名JAXB根类

甄煜
2023-03-14

我使用Eclipse中的Dali插件使用xsd文件生成Java类,它实际上只是在模式文件上调用xjc。我使用这里的建议通过将XML绑定文件应用于类生成来解决命名冲突。这很有效,但我试图通过重命名根元素更进一步,结果丢失了XmlRootElement注释。我尝试使用annox将根元素注释添加回来,但是我得到了这个错误:不受支持的绑定命名空间“http://annox.dev.java.net”。也许您指的是“http://java.sun.com/xml/ns/jaxb/xjc”?

<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"
    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"/>
        </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>

编辑(9/11/2013)-以下是与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>

共有1个答案

茹正祥
2023-03-14

Annox是一个XJC添加,因此除了声明命名空间prefx(xmlns:Annox=“http://Annox.dev.java.net)之外,还需要将其声明为extensionbindingprefix

您的开始标记应该如下所示:

<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">
 类似资料:
  • 我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm

  • 这是我的xml,需要把它转换成Java。我使用了jaxb 并抛出以下异常javax.xml.bind.unmarshalException:意外元素(URI:“http://www.ae.com/event/load”,local:“order”)。需要的元素为<{}LM:order>

  • 目前,我正在映射一个命名空间,通过创建一个包的package-info.java文件与以下注释。 正如您所看到的,我的一个命名空间没有前缀,而另一个命名空间有前缀,这目前是有效的,但我想要另一种映射命名空间的方式,而不必创建单独的文件,任何人都知道我如何将命名空间映射放在类中的注释旁边? 在我的XML中,名称空间声明位于根元素中,如下所示: 我的类声明和注释类似于根元素的下面。 谢谢

  • 我试图从通过JAXB生成的类序列化XML。 班级: 文件“package-info.java”: 编组器(简化,无需错误处理): 此代码生成: 我期待这样的事情: 我有一个类似的代码并且工作正常,但是我不明白为什么这个代码不显示命名空间。有线索吗?谢谢!

  • 我有情况, 有一个sample.xsd(旧版本-没有命名空间)。为同一个XSD文件使用XJC生成JAXB类。我得到了一个使用JAXB类基于XSD解封XML数据文件的示例。sample.xsd文件已更改(新版本-添加的命名空间)。再次为新的XSD文件使用XJC生成JAXB类。该示例已更新,现在可以用于新的XSD文件 现在我有一个情况,我正在获取基于旧XSD的XML数据文件,我想使用更新的示例文件来解

  • 问题内容: 我们可以重命名文件说来? 如果存在,它将重命名吗? 如何将其重命名为已经存在的test1.txt文件,以便将test.txt的新内容添加到其中以供以后使用? 问题答案: 从http://exampledepot.8waytrips.com/egs/java.io/RenameFile.html复制 追加到新文件: