使用 JAXB 生成的 XML 中的重复字段

2024-01-06

这是我的场景。我有一个通用类:

public class Tuple<T> extends ArrayList<T> {
  //...
  public Tuple(T ...members) {
    this(Arrays.asList(members));
  }

  @XmlElementWrapper(name = "tuple")
  @XmlElement(name = "value")
  public List<T> getList() {
    return this;
  }
}

还有一个儿童班:

public class StringTuple extends Tuple<String> {
  public StringTuple(String ...members) {
    super(members);
  }

  //explanation of why overriding this method soon ...
  @XmlElementWrapper(name = "tuple")
  @XmlElement(name = "value")
  @Override
  public List<String> getList() {
    return this;
  }
}

这些类在这里引用:

@XmlRootElement(namespace = "iv4e.xml.jaxb.model")
public class Relation {
  private Tuple<StringTuple> relationVars;
  //...
  @XmlElementWrapper(name = "allRelationVars")
  @XmlElement(name = "relationVarsList")
  public Tuple<StringTuple> getRelationVars() {
    return relationVars;
  }
}

然后使用如下内容创建一个 Relation 对象:

Relation rel = new Relation();
rel.setRelationVars(new Tuple<StringTuple>(
  new StringTuple("RelationshipVar1"), new StringTuple("RelationshipVar2")));

编组该对象后,Xml 输出如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:relation xmlns:ns2="iv4e.xml.jaxb.model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="">

  <allRelationVars>
    <relationVarsList>
        <tuple>
            <value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">RelationshipVar1</value>
        </tuple>
        <tuple>
            <value>RelationshipVar1</value>
        </tuple>
    </relationVarsList>
    <relationVarsList>
        <tuple>
            <value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">RelationshipVar2</value>
        </tuple>
        <tuple>
            <value>RelationshipVar2</value>
        </tuple>
    </relationVarsList>
  </allRelationVars>

</ns2:relation>

So the value元素重复!

现在,类 StringTuple 重写的原因List<T> getList() with List<String> getList()是避免产生烦人的xmlns:xs列表中每个成员的属性(valuexml 文档中的元素)。 但是列表中的每个成员都会在输出中显示两次。显然,这是因为重写的父方法和子方法都用注释@XmlElement。 所以我的主要问题是:有一种方法可以忽略用注释覆盖的方法@XmlElement在贾克斯布? (考虑到覆盖方法也用注释@XmlElement)

我发现一篇旧帖子报告了非常相似的问题:http://old.nabble.com/@XmlElement-on-overridden-methods-td19101616.html http://old.nabble.com/@XmlElement-on-overridden-methods-td19101616.html,但我还没有找到任何解决方案。 另请注意,添加@XmlTransient注释到getList父类的方法(Tuple<T>) 可以解决这个问题,但会产生其他问题,因为父类不是抽象的,并且在其他上下文中单独使用。

一方面的次要问题:是否可以声明xmlns:xs属性出现在根节点而不是 - 烦人 - 出现在每个需要它的节点中?我知道这可以通过NamespacePrefixMapper类,但由于它是一个非标准的 SUN 内部类,我宁愿使用更独立于实现的方法。

预先感谢您的任何反馈!


这可能很旧,但它是搜索“JAXB重复字段”时的第一个结果

偶然发现同样的问题,这对我来说很有效:

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE) // <-- made the difference
public abstract class ParentClass
{
...
}


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

使用 JAXB 生成的 XML 中的重复字段 的相关文章

随机推荐

  • 使用协议“YourProtocol”作为类型必须写为“any YourProtocol”错误

    我在实施协议时遇到错误 我已在名为 的文件中声明了如下协议 TransactionListViewViewModelItem swift 以下是我在此文件中的内容 protocol TransactionListViewViewModelI
  • 如何向 PHP/SQL 搜索脚本添加拼写建议

    使用 php sql 在我的网站上创建搜索功能 非常简单 只需使用 LIKE 子句在数据库上使用 SELECT ALL 查询并在页面上回显结果即可 我的问题是 如果用户输入错误的搜索查询 如何添加拼写建议 除非搜索词与数据库内容完全匹配 否
  • 如何在 MAT Eclipse 中使用 OQL 进行嵌入式查询

    我可以使用如下查询获取所有 Thread 对象 SELECT OBJECTS dominators s FROM java lang Thread s 那么如果我想对返回的结果对象进行进一步的分析 我认为OQL应该如下所示 SELECT f
  • Xamarin.Forms ListView 大小到内容

    我有一个相当大的表单 主要适用于平板电脑 它有一个 GridView 嵌套两个 stacklayouts 和 listview 我很少有一个 ListView 包含一些单行项目 并且我需要它来调整内容的大小 这是我的源代码
  • 单击电子邮件中的 Outlook safelink 保护链接似乎会执行代码两次

    这与编码本身并没有真正的关系 我的项目是在 Laravel 7 1 中 但更多的是在 Outlook 的安全测量中 基本上我有一个功能 可以发送一封包含按钮的电子邮件 它是一个带有令牌的链接 以及我的 Laravel 项目中用于执行某些操作
  • Discord.py SSLCertVerificationError

    我一直在开发一个机器人 昨晚它根据需要运行得很好 但今天早上当我在终端中打开机器人时 出现以下错误 Traceback most recent call last File d Documents Bots DS BOT bot py li
  • 我可以从 Windows 窗体应用程序运行编码 UI 测试吗?

    我可以从 Windows 窗体应用程序运行编码 UI 测试吗 正在寻找样本 Thanks 当然可以 您可以使用 mstest exe 命令行应用程序来运行编码的 UI 测试 您只需要编写简单的算法 确保在启动 mstest 时传递正确的参数
  • Symfony2 反向代理 - 基于 cookie 或其他设置分离相同 URL 的缓存

    我使用默认的 Symfony2 反向代理 并且需要根据 cookie 设置单独缓存同一 URL 该网站通过缩小图像和删除 JavaScript 来提供 基本 网站视图 由于内容相同 我使用了相同的 URL 但缓存当然是一个问题 我需要能够单
  • ASP Classic SQL Server 以 XML 格式从数据库返回结果

    我试图从 ASP 中的查询返回结果 当我使用 Response write Recordset 0 之类的东西时它可以工作 但它不能以 xml 格式工作 这是我的代码 Dim conn Dim Recordset Dim xmlDoc Se
  • 带有固定种子的 scipy.sparse.linalg.eigsh

    我正在尝试使用scipy sparse linalg eigsh https docs scipy org doc scipy reference generated scipy sparse linalg eigsh html具有固定种子
  • 如何使用远程页面的构造函数在 Greasemonkey 用户脚本中创建对象?

    我的用户脚本将运行的页面有一个命名空间 该命名空间定义了一个构造函数 我想使用相同的构造函数创建一个对象 并在我的用户脚本中使用该对象的方法 到目前为止我还没有成功 这就是我正在尝试做的事情 该页面具有以下本机 JavaScript 块 v
  • LinkedIn 岗位检查员给出 500 次失败

    我经营一个博客网站 我正在尝试在 LinkedIn 上分享博客 当我在 LinkedIn 帖子检查器上检查帖子时 它给出 500 错误 我不确定可能出了什么问题 因为我已经包含了元标记 并且我能够在 Facebook 上发布相同的 URL
  • jQuery SlideToggle Google 地图问题

    我读过其他类似的线程 但没有任何问题 响应 这有助于使其足够简单以了解我需要做什么 我使用的是 jQuery 版本 1 7 这可能解释了为什么其他问题中发布的一些代码不相似 Google 地图加载在 SlideToggle 的 div 中
  • 这两个控制器定义有什么区别? [复制]

    这个问题在这里已经有答案了 当我运行代码时 选项A失败但不确定原因是什么 angular module app controller controllerA function scope http code angular module a
  • 使用 fscanf() 使用 feof()

    这是我的代码 include
  • 如何在窗口中捕获数据

    我的计算机上安装了桌面应用程序 当我启动程序时 会打开某种窗口 让我们说 像这样 只是例子 因此 我想用 C 编写一个应用程序来查找此窗口并从中捕获一些数据 我应该看什么工具 我想走一条阻力最小的路 我需要捕获图像 文本框中的文本 还需要通
  • MSpec:如何使静态变量线程安全?

    我正在将 MSpec 用于我的最新项目 总的来说我对它非常满意 但是 当我的测试并行运行时 我确实遇到了并发问题 我想知道是否有人遇到过这个问题 或者更好的是 有解决方案吗 MSpec 严重依赖静态方法和变量来工作 现在 当我在基类中定义由
  • ES6导入错误处理

    我目前正在使用巴别塔 我之前做了以下操作require try var myModule require my module catch err send error to log file 但是当尝试这样做时import try impo
  • Ansible 错误:“此模块需要 rpm 的 Python 2 绑定”

    我尝试使用以下任务在 python3 环境中 pip 安装需求文件 pip python3 yes requirements requirements my requirements txt extra args i http mypypi
  • 使用 JAXB 生成的 XML 中的重复字段

    这是我的场景 我有一个通用类 public class Tuple