从 JAXB 泛型中删除 xsi:type、xmlns:xs 和 xmlns:xsi

2023-11-21

使用 JAXB 时,我想在使用泛型时从 XML 元素中删除多余的命名空间/类型。我该怎么做或者我做错了什么?我想使用泛型,这样我只需编写一次代码块。

示例代码:

public static void main(String[] args) {
    try {
        TestRoot root = new TestRoot();
        root.name.value = "bobby";
        root.age.value = 102;
        root.color.value = "blue";

        JAXBContext context = JAXBContext.newInstance(root.getClass());
        Marshaller marsh = context.createMarshaller();
        marsh.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");
        marsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        marsh.marshal(root,pw);
        System.out.println(sw.toString());
    }
    catch(Throwable t) {
        t.printStackTrace();
    }
}

@XmlRootElement
static class TestRoot {
    @XmlElement public TestGeneric<String> name = new TestGeneric<String>(true);
    @XmlElement public TestGeneric<Integer> age = new TestGeneric<Integer>(true);
    @XmlElement public TestWhatIWouldLike color = new TestWhatIWouldLike(true);
}

@XmlAccessorType(XmlAccessType.NONE)
static class TestGeneric<T> {
    @XmlAttribute public boolean isRequired;
    @XmlElement public T value;

    public TestGeneric() {
    }

    public TestGeneric(boolean isRequired) {
        this.isRequired = isRequired;
    }
}

@XmlAccessorType(XmlAccessType.NONE)
static class TestWhatIWouldLike {
    @XmlAttribute public boolean isRequired;
    @XmlElement public String value;

    public TestWhatIWouldLike() {
    }

    public TestWhatIWouldLike(boolean isRequired) {
        this.isRequired = isRequired;
    }
}

Output:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testRoot>
    <name isRequired="true">
        <value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">bobby</value>
    </name>
    <age isRequired="true">
        <value xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">102</value>
    </age>
    <color isRequired="true">
        <value>blue</value>
    </color>
</testRoot>

我能够在由于泛型参数而导致问题的属性上使用 @XmlAnyElement(lax=true) ,然后必须在正在编组的实际类上添加 @XmlRootElement ,并且声明消失了!极好的!

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

从 JAXB 泛型中删除 xsi:type、xmlns:xs 和 xmlns:xsi 的相关文章

随机推荐

  • 如何获得连续的触摸事件?

    我的类扩展了 View 我需要在其上获取连续的触摸事件 如果我使用 public boolean onTouchEvent MotionEvent me if me getAction MotionEvent ACTION DOWN myA
  • 如何将 json 加载到我的 angular.js ng-model 中?

    我有一个我认为可能是一个非常明显的问题 但我无法在任何地方找到答案 我只是想将一些 JSON 数据从我的服务器加载到客户端 现在 我正在使用 JQuery 通过 AJAX 调用加载它 代码如下 它位于 html 文件中 到目前为止它有效 但
  • WPF 工具包数据网格单元格文本换行

    我的 WPF 数据网格的列是固定宽度的 这意味着行中的长文本被截断 我怎样才能让文字换行 如果您使用的是 DataGridTextColumn 则需要定义 DataGridTextColumn ElementStyle 的样式
  • Reactjs - 如何将值从子组件传递到祖父组件?

    下面是在reactjs中将值从子组件传递到父组件的正确示例 App jsx import React from react class App extends React Component constructor props super
  • 如何访问其他程序内存中的结构?

    我知道如何在 C 中导入和使用读 写进程内存 我正在做游戏训练师 我需要 直接 访问转换为结构的其他进程内存 我可以使用 readprocessmemory 或 writeprocessmemory 但这需要很多时间来实现许多结构 C 中有
  • 在旧的 Borland C 中使用 Visual C++ DLL?

    我必须支持使用旧的 Borland 编译器 BC 5 用 C 编写的旧应用程序 不幸的是 我们使用的旧 TCP IP 库开始显示出它的年龄 并且在 Vista 和 Win7 机器上出现问题 我有一个可用于 MS Visual C 的新函数库
  • 如何提取ctree()终端节点的分裂规则

    我有一个包含 6 个分类变量的数据集 级别范围从 5 到 28 我已获得以下输出 ctree 派对包 有 17 个终端节点 我已关注 Galled 的输入ctree 如何获取每个终端节点的分裂条件列表 达到我想要的输出 但是 我在运行代码时
  • $resource `get` 函数如何在 AngularJS 中同步工作?

    我当时正在看thisAngularJS 教程描述了如何使用 Angular 资源连接 Twitter 视频教程 这是在示例控制器中设置的资源 scope twitter resource http twitter com action ac
  • 使用 PHP 获取 TrueType 中可用的字符

    如何获取 TrueType 字体中所有可用字符的列表 使用 PHP PHP 似乎没有任何可用的扩展directly with FreeType 处理 TrueType 字体的统治性开源库 您可能需要使用适当的库来使用另一种语言 例如Perl
  • ModuleNotFoundError:没有名为“django”的模块

    我正在尝试在线制作一个项目 但出现一个我无法解决的错误 我已经安装了 django 但服务器给我这个错误 Virtualenv 也处于活动状态 2017 09 25 20 10 27 471 2017 09 25 20 10 30 892
  • 无法将 ListBox.ObjectCollection 转换为(类型化)数组

    我想将项目转换为字符串数组或我用来填充 ListBox DataSource 的类型 该类型已覆盖 ToString 但我似乎无法将其转换 甚至无法转换为 String String a String ListBox1 Items Cont
  • Cognito 用户池触发器上的 AWS Lambda 错误

    我正在尝试将一条记录插入到 DynamoDB 中 调用 Cognito 用户池的 预注册 触发器 出于测试目的 Lambda 函数非常简单 但在 AWSCognito CognitoIdentityServiceProvider Cogni
  • 刚刚开始出现 AIR SQLite 错误 3182 发生磁盘 I/O 错误

    我们的软件有一个新的测试版 进行了一些更改 但不是围绕我们的数据库层 我们刚刚开始在服务器日志中报告错误 3128 似乎一旦发生 只要应用程序打开 它就会发生 代码中最明显的部分是我们通过 SQLite 每秒记录数据的部分 仅这个月我们的服
  • 仅在 Swift 4.2 中上传带有多部分表单数据的图像

    我尝试了很多解决方案 我得到了一些 但他们正在使用objective c code在某处 我只需要解决方案swift 4 2并且没有任何第三方 例如Alamofire 使用它工作正常objective c类 我已经能够仅使用标头和其他参数以
  • 在 C# 中,创建新字节数组时字节的默认值是多少?

    这个问题的答案已经超出了我的搜索范围 当我这样做时 var authToken new byte 16 authToken 0 的值是多少 它是零还是零 默认值为 0 有关默认值的更多信息 http msdn microsoft com e
  • NSTableView + 删除键

    我正在寻找一种简单的解决方案 通过按删除键来删除 NSTableView 行 我在谷歌搜索时看到的都是这样的答案 http likethought com lockfocus 2008 04 a slightly improved nsta
  • EJB 3.1 容器管理的并发与同步

    我已经开始阅读有关单例会话 bean 和用于采用容器管理并发的注释的内容 与简单地使用 同步 关键字相比 我没有看到这样做的好处 所以我怀疑我遗漏了一些重要的东西 考虑一下书中的这个例子 企业 JavaBeans 3 1 作者 Rubing
  • 在pandas中找到每组中最小值大于值的行

    我有一个数据框 如下所示 pd DataFrame A C1 C1 C1 C1 C2 C2 C2 C2 C3 C3 C3 C3 B 1 4 8 9 1 3 8 9 1 4 7 0 Out 40 A B 0 C1 1 1 C1 4 2 C1
  • python查找字符串中重复的子字符串[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在Python中寻找一个函数 您可以在其中给出一个字符串作为输入 其中某个单词已重复多次 直到达到一定的长度 那么输出就是那个词 重复的单词不一定全部重复 也有可能根本没有重
  • 从 JAXB 泛型中删除 xsi:type、xmlns:xs 和 xmlns:xsi

    使用 JAXB 时 我想在使用泛型时从 XML 元素中删除多余的命名空间 类型 我该怎么做或者我做错了什么 我想使用泛型 这样我只需编写一次代码块 示例代码 public static void main String args try T