JAXB 忽略响应 XML 中的“额外”元素
我得到了一个XML响应,它不断变化非常频繁(节点不断增加或减少)。在响应xml的每次更新之后,我的代码中断,因为我映射的Java类没有所有文件。
有没有办法在响应 XML 中发生任何更改时避免我的代码中断。
任何帮助将不胜感激。
谢谢。
我得到了一个XML响应,它不断变化非常频繁(节点不断增加或减少)。在响应xml的每次更新之后,我的代码中断,因为我映射的Java类没有所有文件。
有没有办法在响应 XML 中发生任何更改时避免我的代码中断。
任何帮助将不胜感激。
谢谢。
用于简单地从 XML 创建 Java 对象。JAXB.unmarshal()
默认情况下,它非常自由。
引用 javadoc:
此外,非马歇尔方法具有以下特征:
- 不对输入 XML 执行架构验证。即使 XML 中存在错误,处理也将尽可能地尝试继续。仅作为最后的手段,此方法在 DataBindingException 中失败。
因此,它试图将尽可能多的数据从XML“传输”到Java,它不关心XML元素或属性是否没有Java字段,也不关心是否存在没有XML元素或属性的Java字段。JAXB.unmarshal()
让我们尝试将以下 XML 取消到 以下的实例:java.awt.Point
<p hi="Yo">
<y>123</y>
<peach>weor</peach>
</p>
Java 代码:
String s = "<p hi=\"Yo\"><y>123</y><peach>weor</peach></p>";
Point p = JAXB.unmarshal(new StringReader(s), Point.class);
System.out.println(p); // Prints "java.awt.Point[x=0,y=123]"
我们告诉解析一个实例。输入 XML 包含一个可与之匹配的元素,因此已解析 a 并将其设置为 。未找到 的 XML 数据,因此未触及该数据。属性和XML元素没有匹配,所以它们根本不用于任何事情。JAXB.unmarshal()
java.awt.Point
<y>
Point.y
int
Point.y
Point.x
hi
<peach>
我们在这里完全没有,并且最多可能被解析并从XML转移到Java。Exception
若要处理未知字段,可以添加带批注的属性List<Object>
@XmlAnyElement(lax=true)
@XmlAnyElement(lax = true)
private List<Object> anything;
输入中与类的显式属性不对应的任何元素都将被扫入此列表中。如果该元素已知,您将获得未编组形式(带注释的类或a),如果该元素对上下文未知,您将获得.JAXBContext
@XmlRootElement
JAXBElement<Foo>
org.w3c.dom.Element
对于被删除的节点,只要使用可以为 null 的类型(而不是 、而不是 等),就应该没问题。Integer
int
Boolean
boolean