JAXB 注释 - 映射接口和 @XmlElementWrapper

2024-03-23

我在使用 JAXB 注释来处理某个字段时遇到问题,该字段是一个泛型类型为接口的列表。当我声明如下时:

@XmlAnyElement
private List<Animal> animals;

每件事都正常进行。但是当我添加包装元素时,例如:

@XmlElementWrapper
@XmlAnyElement
private List<Animal> animals;

我发现 Java 对象正确封送,但是当我解封封送创建的文档时,我的列表为空。我在下面发布了代码来演示这个问题。

我做错了什么,还是这是一个错误?我已经用版本 2.1.12 和 2.2-ea 尝试过,结果相同。

我正在研究使用此处的注释映射接口的示例: https://jaxb.dev.java.net/guide/Mapping_interfaces.htmlhttps://jaxb.dev.java.net/guide/Mapping_interfaces.html https://jaxb.dev.java.net/guide/Mapping_interfaces.html

@XmlRootElement
class Zoo {

  @XmlElementWrapper
  @XmlAnyElement(lax = true)
  private List<Animal> animals;

  public static void main(String[] args) throws Exception {
    Zoo zoo = new Zoo();
    zoo.animals = new ArrayList<Animal>();
    zoo.animals.add(new Dog());
    zoo.animals.add(new Cat());

    JAXBContext jc = JAXBContext.newInstance(Zoo.class, Dog.class, Cat.class);
    Marshaller marshaller = jc.createMarshaller();

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    marshaller.marshal(zoo, os);

    System.out.println(os.toString());

    Unmarshaller unmarshaller = jc.createUnmarshaller();
    Zoo unmarshalledZoo = (Zoo) unmarshaller.unmarshal(new ByteArrayInputStream(os.toByteArray()));

    if (unmarshalledZoo.animals == null) {
      System.out.println("animals was null");
    } else if (unmarshalledZoo.animals.size() == 2) {
      System.out.println("it worked");
    } else {
      System.out.println("failed!");
    }
  }

  public interface Animal {}

  @XmlRootElement
  public static class Dog implements Animal {}

  @XmlRootElement
  public static class Cat implements Animal {}
} 

应该使用 @XmlElementRefs({ @XmlElementRef(类型=Dog.class), @XmlElementRef(type=Cat.class)}) 私人名单动物;

或使用 仅限 @XmlAnyElement(lax = true),并将 Dog.class、Cat.class 添加到 JaxbContext

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB 注释 - 映射接口和 @XmlElementWrapper 的相关文章

  • JAXB/Jackson:没有父标签的两个元素的序列

    Update 寻找杰克逊orJAXB 解决方案 在对 Jackson 的行为进行了一些研究之后 我发现 Jackson 总是会使用集合的包装器 所以杰克逊可能无法满足我的需求 因此 将 JAXB 添加到标题中 原始问题 我需要为以下 XML
  • Spring MVC:在表单处理操作中有多个@ModelAttribute

    上下文 我在两个实体之间有一个简单的关联 Category and Email NtoM 我正在尝试创建用于浏览和管理它们的网络界面 要浏览类别并将电子邮件添加到该类别中 我使用包含以下内容的控制器 RequestMapping带有类别 I
  • 在自定义 BaseAdapter 子类中使用 Butter Knife 会导致“无法注入视图”错误

    我正在尝试使用 Butter Knife 来简化自定义 BaseAdapter 类的创建 我正在遵循这里的示例 http jakewharton github io butterknife http jakewharton github i
  • JDK 8 中的默认值是 Java 中多重继承的一种形式吗?

    JDK 8 中的一项新功能允许您添加到现有接口 同时保留二进制兼容性 语法就像 public interface SomeInterface void existingInterface void newInterface default
  • 如何在 Java 中以编程方式获取接口的所有实现的列表?

    我可以通过反思或类似的方式来做到这一点吗 我已经搜索了一段时间 似乎有不同的方法 这里总结一下 反思 https github com ronmamo reflections如果您不介意添加依赖项 该库非常受欢迎 它看起来像这样 Refle
  • 如何实现有效的 Java 特征?

    请告诉我这是否不合适 特别是 Programmers SE 或其他东西是否更适合这个问题 好吧 因此 我目前将许多 特征 表达为接口 我们称它们为 可更新 和 可破坏 将它们表达为接口的缺点是我无法在所有 可破坏 组件之间共享行为 另一方面
  • Moq-ing 类或接口有什么区别?

    我一直在使用moq http code google com p moq 在我的单元测试中模拟对象 我在关于最小起订量的网站上看到它能够模拟类和接口 有一天 我与我的一位同事进行了讨论 他们表示没有理由模拟类 我应该只模拟接口 我对此并没有
  • 使用 Spring 通过构造函数自动装配集合

    我有一个看似简单的问题 如标题所示 这是我的课程类型 public class Foo Autowired public Foo Qualifier bar Set
  • typescript 扩展不需要的接口

    我有两个接口 interface ISuccessResponse Success boolean Message string and interface IAppVersion extends ISuccessResponse OSVe
  • Xstream:删除类属性

    我该如何删除类 某事 Xstream 中的属性 我使用带注释的 Xstream 我读了它的代码 发现你的类不是mapper defaultImplementationOf fieldType 它会为你添加默认的类属性 除非类属性名称为nul
  • Spring:在属性文件中定义@RequestMapping值

    是否可以定义a的值 RequestMapping在 Spring 中通过在属性文件中定义注释 实际上 我做了类似的事情 Controller RequestMapping xxx public class MyController 但我想存
  • 在注释处理器中获取字段类

    我正在编写我的第一个注释处理器 并且遇到了一些看似微不足道的问题 但我找不到有关它的任何信息 我有一个用我的注释注释的元素 MyAnnotation String property 当我将此属性作为处理器中的元素获取时 我似乎无法以任何方式
  • 在运行时选择模板参数时如何避免代码呈指数级增长

    考虑一堆基本类型 Foo 所有这些都具有通用方法的独特实现 Bar 我可以结合Foo1 Foo2 Foo5像这样 CombinedFoo
  • 如何解决 java.lang.ClassNotFoundException: org.docx4j.jaxb.ri.NamespacePrefixMapper

    我目前正在尝试使用 docx4j 库将文件从 html 转换为 docx 我已经成功地使用 itext5 从 html 转换为 pdf 但现在由于 jaxb 我在尝试转换为 docx 时遇到了异常 我的项目使用maven 所以我尝试导入很多
  • 如何在 IntelliJ IDEA 13 中创建 JAXB 项目?

    我正在学习JAXB 我需要知道如何在 IntelliJ IDEA13 中为 JAX B 创建一个简单的 java 项目 如果有人有想法 请更新我并使用 IDEA 的任何插件更新我 Thanks 创建项目时 您无需执行任何特殊操作 只需一个简
  • 我可以在方法体内使用注释吗?

    允许 Java 注释的语义将它们放置在某处在函数体内 例如注释特定的函数调用 语句或表达式 例如 class MyClass void theFunc Thing thing String s null Catching NullPoint
  • 使用Java查找无线网络的SSID

    我们正在做一个用 Java 编码的项目 为 JRE 1 6 编译 需要一些帮助 一个有点但明显复杂的功能 我们希望在连接特定无线网络时执行特定操作 例如当连接的 SSID myNetworkAtHome 或类似名称时 在浏览了这个网站 谷歌
  • 尝试在 android studio 中调试注释处理器最终出现异常

    使用Android Studio 3 1 3 等级3 1 2 使用 5005 端口使用默认配置运行远程构建 and 在 gradle properties 文件中 org gradle daemon false org gradle jvm
  • 让按钮更容易点击

    我有一个按钮 在某些手机上由于尺寸太大而很难点击 但让它变大会破坏布局 可以向视图解释它有一个比其可见区域更大的 点击框 吗 不确定这是否有帮助 如果您使用没有背景的 ImageButton 并设置 Padding 值 您的按钮将具有更大的
  • Pylance:“property”与“int”不兼容

    from typing extensions import Protocol class IFoo Protocol value int class Foo IFoo property def value self gt int retur

随机推荐

  • 如何使用 cmp 将排序从 python 2 转换为 python 3?

    我正在尝试将用 python 2 编写的代码转换为 python 3 nums 30 31 num sort cmp lambda x y cmp y x x y 不知道如何在 python 3 中做到这一点 因为 cmp 被删除了 我相信
  • 测试 Dart 值是否实际上是一个函数?

    是否可以测试一个值是否是一个可以调用的函数 我可以轻松测试 null 但之后我不知道如何确保传入的参数实际上是一个函数 void myMethod funcParam if funcParam null How to test if fun
  • 检查 VSTS 中以前的构建信息(VSTS API)

    在执行 VSTS 构建期间是否可以访问以前的构建变量 例如 我可以获得先前构建的 Build SourceVersion 或 Build QueuedBy 吗 我可以通过 Build SourceVersion 等构建变量获取当前构建信息
  • 使用 LDAP 用户名作为实体名称

    我正在使用 Hashicorp Vault 1 9 0 并且启用了 LDAP 身份验证方法 该方法按预期正常工作 但有一个问题 LDAP 是我们独特的身份验证方法 当然 除了令牌之外 并且 LDAP 用户不是提前在 Vault 中创建的 因
  • 在 PHP 中搜索并获得双重结果

    这是我的 PHP 代码 我用它从 PHPMyAdmin 的数据库 Mysql 中进行搜索 但是当我得到结果时 它显示双倍 我不明白为什么是双的 如果它是 for foreach 循环 那么我将使用什么来代替它 请帮我解决代码
  • Python (CherryPy) Web 应用程序部署在本地,但在 Intranet 上不可见

    我使用 CherryPy 创建了一个 Python Web 应用程序 并部署在我的本地计算机上 当我尝试从家里的另一台计算机上查看它时 没有任何结果 但是 如果我创建一个简单的 html 文件 并使用以下命令部署它 python m Sim
  • 如何将 SAP .txt 提取转换为 .csv 文件

    我有一个 txt 文件 如下面报告的示例所示 我想将其转换为 csv 表 但我没有取得太大成功 Mack3 Line Item Journal Time 14 22 33 Date 03 10 2015 Panteni Ledger 1L
  • Jquery随机单词不重复

    我需要在 div 中显示随机单词而不重复该单词 随机单词将每隔随机秒 3 5 秒 附加一个 div 如果数组中的所有值都显示在 div 中 则会发出警报 例子 b a c d ALERT DONE Not b a b c d d a a c
  • 无法聚焦 Web 元素来发送密钥

    我有一组测试 需要登录然后执行搜索 我的应用程序是 Angular JS 我正在起诉 Protractor 事实上 我的测试工作正常 直到我收到我的应用程序的新套件 并且此时我的所有测试都失败了 element by id mainGlob
  • C# 访问另一个用户的注册表

    我当前使用的 Windows 服务有问题 基本上 我将一些值存储在HKCU注册表 来自以管理员身份运行的 GUI 工具 并从该 GUI 中启动一项服务 该服务使用SYSTEM帐户来运行 我相信这是我的问题 我无法访问服务中使用 GUI 工具
  • 从命令行将 JAR 依赖项与可执行 JAR (Über JAR) 捆绑在一起

    我正在尝试从命令行创建可执行 jar JAR 中的主类具有我已打包到另一个普通 JAR 文件中的依赖项 我想将依赖项 JAR 与可执行 JAR 打包在一起 以便提供单个 JAR 文件 到目前为止我已经尝试过以下内容 依赖Hello clas
  • C++ 和抽象类中的继承

    我在正确处理存在抽象类的方法重写时遇到问题 在我的类层次结构中 我会尝试解释一下 class AbstractClass public virtual void anyMethod 0 class A public AbstractClas
  • 使用 WinSCP .NET 未找到方法异常 (EventWaitHandle..ctor)

    我正在尝试使用 PowerShell 和 WinSCP NET 程序集连接到 SFTP 服务器 代码无法打开会话 session Open sessionOptions 在我发现的日志中 Exception System MissingMe
  • 每个版本的 IE 在新窗口中打开链接

    我一直在设计一个网站 并使用 Safari 和 Chrome 进行大部分测试 我刚刚尝试测试 Firefox 也很顺利 让 IE 来解决吧 由于某种原因 对于从 IE 6 到 IE 10 的每个版本 每个链接都会打开一个新窗口 在 IE 1
  • 将文本包裹在圆形 div 内[重复]

    这个问题在这里已经有答案了 我想完成这样的事情 我尝试创建一个 div 并给它一个border radius of 50 问题是文本溢出了圆角 我怎样才能做到这一点 以便整个圆圈可以被填满而不溢出 那这个呢 div border 1px s
  • XML 在 python 中行走[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是 python 新手 想了解解析
  • Python 多处理作业到 Celery 任务但 AttributeError

    我做了一个像这样的多处理函数 import multiprocessing import pandas as pd import numpy as np def apply df args df func kwargs args retur
  • 为什么 x86-64 System V 调用约定在寄存器中传递参数而不是仅在堆栈中传递参数?

    为什么 32 位 C 将所有函数参数直接压入堆栈 而 64 位 C 将前 6 个参数放入寄存器 其余参数压入堆栈 所以 32 位堆栈看起来像 arg2 arg1 return address old rbp 虽然 64 位堆栈看起来像 ar
  • 如何解决/处理委托 EXC_BAD_ACCESS 错误?对象C

    我正在编写一个库 iPhone 的 Obj C 我想打包并出售它 所以我显然需要在将其出售之前解决所有设计问题 我还利用这个库来帮助我开发另一个应用程序 我的库很大程度上建立在任务委派的基础上 我的主要功能是启动一个 可能 长时间运行的进程
  • JAXB 注释 - 映射接口和 @XmlElementWrapper

    我在使用 JAXB 注释来处理某个字段时遇到问题 该字段是一个泛型类型为接口的列表 当我声明如下时 XmlAnyElement private List