我得到了一个XML响应,并且它一直在频繁地变化(节点在不断增加或减少)。在响应xml的每次更新之后,我的代码都会中断,因为我映射的Java类没有所有的filed。
如果响应XML中发生任何更改,有什么方法可以避免代码中断吗?
任何帮助都将不胜感激。
谢谢。
发布于 2014-09-02 19:02:56
要处理未知字段,可以添加一个注释为@XmlAnyElement(lax=true)的List<Object>属性
@XmlAnyElement(lax = true)
private List<Object> anything;输入中与类的显式属性不对应的任何元素都将被扫到此列表中。如果元素对于JAXBContext是已知的,那么您将获得未编组的形式(带@XmlRootElement注释的类或JAXBElement<Foo>),如果该元素对于上下文未知,您将获得一个org.w3c.dom.Element。
Full details in Blaise's blog。
对于被移除的节点,只要您使用的类型可以是null (Integer而不是int,Boolean而不是boolean,等等),就应该没问题。
发布于 2014-09-02 19:06:07
使用JAXB.unmarshal()可以简单地从XML创建Java对象。
默认情况下,它是非常自由的。
引用自javadoc
此外,解组方法还具有以下特征:
未对输入XML执行
而失败
因此,JAXB.unmarshal()所做的就是尝试将尽可能多的数据从XML语言“传输”到Java语言中,它不关心是否有用于XML元素或属性的Java域,也不关心是否有没有XML元素或属性的Java域。
示例
让我们尝试将以下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]"我们告诉JAXB.unmarshal()解析一个java.awt.Point实例。输入XML包含一个可以与Point.y匹配的元素<y>,因此解析了一个int并将其设置为Point.y。找不到Point.x的XML数据,因此未触及该数据。属性hi和XML元素<peach>没有匹配项,因此它们根本不能用于任何用途。
我们在这里完全没有Exception,最大的可能是解析并将其从XML语言传输到Java语言。
https://stackoverflow.com/questions/25621655
复制相似问题