JAXB 解组中 XML 中的命名空间存在问题

2023-12-20

我有一个 XML 需要使用 JAXB 进行解组。如果我从元素中删除所有命名空间属性,则代码可以正常工作,但如果保留命名空间属性,则在解组后会得到一个空对象。

XML 是这样的:

<Animal  xmlns="http://allmycats.com/serviceplatform/1.0/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Cat z:Id="i3" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<name>kitty</name>
</Cat>
<Cat z:Id="i2" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<name>kitty2</name>
</Cat>
</Animal>

我的动物豆是这样的:

    @XmlRootElement(name = "Animal")
public class Animal{
    List<Cat> cats;

    @XmlElement(name = "Cat")
    public List<Cat> getCats() {
        return cats;
    }

    public void setCats(List<Cat>cats) {
        this.cats= cats;
    }
}

猫豆就像:

@XmlRootElement(name = "Cat")
public class Cat {
    private String zId;

    @XmlAttribute(name = "z:Id", namespace="http://schemas.microsoft.com/2003/10/Serialization/")
    public String getzId() {
        return zId;
    }
    public void setzId(String zId) {
        this.zId = zId;
    }

    private String name;
    @XmlElement(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

在运行时,我得到一个空对象。我尝试删除"z:"从属性中我得到了这个异常:

org.xml.sax.SAXParseException; The prefix "z" for attribute "z:Id" associated with an element type "Cat" is not bound.]

如果我从 cat 和 Animal 中删除名称空间,则会出现以下异常:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://allmycats.com/serviceplatform/1.0/", local:"Animal"). Expected elements are <{}Animal>

解组的最终代码如下。最后一行给出了空指针异常

File file = new File(filepath1);
System.out.println("file exists? : "+ file.exists()); // prints true

JAXBContext jaxbContext = JAXBContext.newInstance(Animal2.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Animal2 animals = (Animal2)jaxbUnmarshaller.unmarshal( file );
System.out.println("--file size: "+animals.getCats().size());

我不确定如何处理名称空间和z:我的 POJO 类中的属性。请问有什么建议吗?

如果 XML 中没有任何命名空间或任何带有命名空间的属性,则代码可以正常工作,但无法更改 XML。


XMLAttribute 有属性命名空间,所以

@XmlAttribute(name = "Id", namespace="http://schemas.microsoft.com/2003/10/Serialization").

根据您的 xml 判断,猫与动物位于同一名称空间中,因此

以下代码适用于 JDK 7(修复了动物的 ns 和 zid 的属性名称)。

@XmlRootElement(name = "Animal",namespace = "http://allmycats.com/serviceplatform/1.0/")
public class Animal2{
    List<Cat2> cats;

    @XmlElement(name = "Cat")
    public List<Cat2> getCats() {
        return cats;
    }

    public void setCats(List<Cat2>cats) {
        this.cats= cats;
    }
}
@XmlRootElement(name = "Cat")
public class Cat2 {
    private String zId;

    @XmlAttribute(name = "Id", namespace="http://schemas.microsoft.com/2003/10/Serialization/")
    public String getzId() {
        return zId;
    }
    public void setzId(String zId) {
        this.zId = zId;
    }

    private String name;

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

JAXB 解组中 XML 中的命名空间存在问题 的相关文章

  • “java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

    如果我设置一个套接字 SoTimeout 并从中读取 当读取时间超过超时限制时 我会收到 SocketTimeoutException 读取超时 这是我的例子中的堆栈 java net SocketTimeoutException Read
  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil

随机推荐

  • 强制 Windows 显示我的自定义文件类型的缩略图

    我想使用 C 中的 Windows OpenFileDialog 类来浏览我的应用程序的文件 然后 我希望这些文件能够在 Windows 的 缩略图 视图中显示预览 有没有一种简单的方法可以实现这一点 我认为应该有一种方法对文件进行编码 以
  • 在Go中的函数内定义递归函数

    我正在尝试在 Go 中的另一个函数中定义递归函数 但我很难获得正确的语法 我正在寻找这样的东西 func Function1 n int a 10 Function2 func m int int if m lt a return a re
  • 如何自定义 Facebook 的 sharer.php

    http www facebook com sharer sharer php u http 3A 2F 2Fwww google com http www facebook com sharer sharer php u http 3A
  • 通过preferences.xml中的Intent打开应用程序设置

    我想通过单击首选项条目来打开应用程序设置 所以我在preferences xml中添加了一个意图
  • 替换 Objective-C Foundation 函数实现

    有没有办法替换 Objective C Foundation 函数的实现 例如 NSClassFromString 函数 我当然知道类替换方法 https developer apple com library ios DOCUMENTAT
  • 如何使用 dplyr 将多列转变为新的多列

    我正在尝试将 3 列更改为更大表 包含更多列 中的 3 个新列 其中 3 个新列依赖于前 3 个现有列 第四个新列仅依赖于第四个现有列 基本上 我想在 3D 空间中旋转点的坐标 在 x y z 列中 并存储在新列 x rot y rot z
  • 安装 Python3 的 PySide

    当我尝试为 Python 3 6 安装 PySide 时 它 说它只兼容 Python 3 4 是否有任何解决方法可以为 Python 3 6 安装它 似乎仅支持以下 Python 版本 2 6 2 7 3 2 3 3 3 4 要获取最新的
  • HBase - java 中的 java.lang.NoClassDefFoundError

    我只是想使用 Java 与 Hbase 交互 import org apache hadoop conf Configuration import org apache hadoop hbase import org apache hado
  • 动态添加到 Highcharts

    我有一个 json 对象 我正在尝试将其添加到我的 highcharts 选项中 我可以通过 API 接收该对象 并将其传递给我的 highcharts 函数 但我无法将我的数据添加到它周围的静态数据中 var datas datas ge
  • 使用声明性数据绑定 ASP.NET 进行评估

    我一直在尝试使用声明性数据绑定 ASP NET 并与幕后发生的 魔法 作斗争 我如何让它在 ASP Net 2 0 中工作 这是在数据范围内FormView控制
  • 从提交历史记录中获取 GitHub 用户名

    我将一个存储库克隆到我的机器上 然后做了 git log 但在日志中 它显示了该人的全名和电子邮件 而不是他们的 github 用户名 有没有一种方法可以在不依赖 GitHub 网站的情况下将提交与用户关联 如果你想使用 git log 似
  • Google Sheets 功能可对行进行分组和连接

    样本表 https docs google com spreadsheets d 1AeP0sxDi0 3aaesUdCNTKfricIimjTMFaKO FX9 g50 edit usp sharing https docs google
  • 如何使用 htaccess 从 url 中删除 GET 参数?

    我的网站除了一页之外不使用任何 GET 参数 尽管如此 我可以看到 Google 成功地使用 GET 参数索引了我的一堆页面 这对于 SEO 重复内容 来说不太好 因此 我尝试编辑 htaccess 以在所有带 GET 参数的 url 到不
  • 订阅我自己的 C# 事件会造成内存泄漏吗?

    如果基类发布 C 事件并且派生类订阅该事件 即订阅其自身 事件订阅会阻止对象被垃圾收集吗 或者垃圾收集器是否足够聪明来检测这种循环引用情况 乍一看 似乎应该如此 但我很确定我已经看到了执行此操作的控制代码 这是一个如此基本的问题 我不敢相信
  • 在 jquery 中获取数据绑定值

    我正在使用 knockout js 设置跨度值 HTML 代码 span span 这工作正常并在用户界面上显示用户名 我正在尝试从 js 文件中获取该值 使用下面的代码 alert this attr data bind 这是这样的服务结
  • 调整 UITextField 或 UITextView 出现键盘时的界面

    我有一个表格 每个单元格都包含一个标签和一个文本字段 问题是 当我去编辑最后一行时 键盘隐藏了表格的下部 我看不到正在输入的内容 如何将界面移动到键盘上方以便看到正在输入的内容 谢谢 穆斯塔法 你需要注册你的 viewControllerU
  • Android + 致命异常:Timer-0(使用计时器删除 ImageView)

    在我的 Android 应用程序中 我使用计时器来使用 TIMER 显示相应的 ImageView 我收到一个错误 02 27 06 39 33 999 E AndroidRuntime 1325 FATAL EXCEPTION Timer
  • UISegmentedControl 选择的索引始终为 0?

    我有一个 UISegmentedControl 它有 6 个段 是我在 Interface Builder 中创建的 我在值更改时调用以下方法 IBAction segmentedChartButtonChanged id sender s
  • appView.addJavascriptInterface() 不适用于 API 17

    我可以使用我的phonegap java脚本函数和android 2 2中的java函数 但相同的代码不在 API 17 上运行 我应该做什么才能从 API 17 中的 java 脚本调用本机 java 代码 我在我的java文件中使用这个
  • JAXB 解组中 XML 中的命名空间存在问题

    我有一个 XML 需要使用 JAXB 进行解组 如果我从元素中删除所有命名空间属性 则代码可以正常工作 但如果保留命名空间属性 则在解组后会得到一个空对象 XML 是这样的