JAXB xjc:简单绑定不会为基类生成@XmlRootElement

2024-02-27

我正在使用 JAXB 2.0。我在 XSD 文件中定义了各种元素和类型。这是一个例子:

<xs:element name="Person" type="Person" />
<xs:complexType name="Person">
    <xs:attribute name="name" type="xs:string"/>
</xs:complexType>

<xs:element name="Musician" type="Musician"/>
<xs:complexType name="Musician">
    <xs:complexContent>
        <xs:extension base="Person">
             <xs:attribute name="instrument" type="xs:string"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="People" type="People"/>
<xs:complexType name="People">
    <xs:sequence>
        <xs:element name="person" type="Person" minOccurs="0" maxOccurs="Unbounded/>
    </xs:sequence>
</xs:complexType>

正如您从上面的模式示例中看到的,我们有一个有名字的人,还有一个音乐家,他也是一个人(尽管这可能会引起一些争论,但那是另一个论坛的事)。还有一个 People 元素,它本质上是 Person 类型的集合。

我的绑定文件中有以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
jaxb:version="2.0" 
xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc" 
jaxb:extensionBindingPrefixes="xjc"> 
    <jaxb:globalBindings optionalProperty="wrapper"> 
            <xjc:simple/>
    </jaxb:globalBindings> 

我对这些对象的预期用途是:

  1. Person 可能会显示为单独的 Marshalled 元素,也可能是 People 对象的一部分
  2. 如果 Person 是 People 对象的一部分,则 xsi:type 应指示它是普通 Person 还是音乐家。

因此,我需要生成的 Java 类同时包含 @XmlRootElement 注释和 @XmlType 注释。 xjc:simple 绑定为 Musician 创建两个注释,但仅为 Person 创建 @XmlType。因此,当我编组 Person 对象时,我得到的只是:

<?xml version="1.0" encoding="UTF-8"?>

而我想看到的是:

<?xml version="1.0" encoding="UTF-8"?>
<Person name="John Doe"/>

对于 People 对象,我想看到:

<?xml version="1.0" encoding="UTF-8"?>
<People>
    <person name="John Doe" xsi:type="Person"/>
    <person name="Keith Richards" xsi:type="Musician"/>
</People>

我读过有关 xjc 的简单绑定的内容,它适用于继承层次结构中的所有最低级别。但是,基类最终没有 @XmlRootElement 注释。对于我正在处理的用例,基类必须能够编组为顶级元素和其他元素的成员。欢迎大家提出意见。


https://github.com/highsource/jaxb2-annotate-plugin https://github.com/highsource/jaxb2-annotate-plugin可用于

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:annox="http://annox.dev.java.net"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               jaxb:version="2.1"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
               jaxb:extensionBindingPrefixes="xjc annox">

    <jaxb:bindings node="//xs:complexType[@name='Person']">
        <annox:annotate>
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="person"/>
        </annox:annotate>
    </jaxb:bindings>
</jaxb:bindings>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB xjc:简单绑定不会为基类生成@XmlRootElement 的相关文章

  • 检查 XML 元素是否存在

    如何验证 XML 文件中是否存在特定元素 假设我有一个不断变化的 XML 文件 我需要在读取 解析它之前验证每个元素是否存在 if doc SelectSingleNode mynode null 应该这样做 显然 其中 doc 是您的 X
  • 使类只能从特定类实例化

    假设我有 3 节课class1 class2 and class3 我怎样才能拥有它class1只能通过实例化class2 class1 object new class1 但不是 class3 或任何其他类 我认为它应该与修饰符一起使用
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 在哪里保存选项值、重要文件的路径等[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个程序 需要设置一些选项值以及图像文件的一些路径 SQLite 数据库的路径 有关各种按钮上文本的一些信息 有关要使用哪个数据库的信
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 如何在 JPA 和 Hibernate 中将数据库生成的列值定义为只读字段?

    使用 MariaDB 10 2 可以定义日期时间的默认值 例如创建和最后修改 我应该如何将此列作为只读字段访问 因为这个值应该只在数据库的控制之下 并且不应该从代码中修改 但我想在代码中读取这个属性 这很简单 只需设置insertable
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 用于层次结构树角色的 Spring Security / Java EE 解决方案

    我知道 Spring Security 非常适合标准角色和基于权限的授权 我不确定的是这种情况 系统中管理着 10 000 名员工 员工被组织成组织结构图 跨部门的谁向谁报告的树 其中一些员工是用户 这些用户仅被允许访问其职责范围内的员工
  • 正确签名的 JNLP 应用程序无法在 Java 7 中运行

    我有一个 JNLP 应用程序 由于证书过期需要更新 我有一个经过 CA 验证的新证书 我已将新证书导入到我的密钥库中 我已导入完整的证书链 我的构建文件对构建中的 jar 进行签名和时间戳
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • 如何从intellij项目视图中隐藏不必要的文件?

    给定一个示例 gradle 项目 其项目结构如下所示 正如你所看到的 有很多东西你实际上不需要在想法中看到 但你需要它们存在 我知道下面被忽略的文件 文件夹类型Editor File Types但这些正在影响库和项目 idea 会在各处忽略
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整

随机推荐