Arp*_*wal 11 java xml annotations jaxb
我得到了一个XML响应,它不断变化(节点不断增加或减少).在响应xml中的每次更新之后,我的代码断开,因为我的映射Java类没有所有文件.
如果在响应XML中发生任何更改,有没有办法避免我的代码中断.
任何帮助将不胜感激.
谢谢.
icz*_*cza 17
用于JAXB.unmarshal()从XML简单地创建Java对象.
默认情况下,这是非常自由的.
引用javadoc:
此外,unmarshal方法具有以下特点:
- 不对输入XML执行模式验证.即使XML中存在错误,处理也会尽可能地继续进行.仅作为最后的手段,此方法因DataBindingException而失败.
那么JAXB.unmarshal()它试图将尽可能多的数据从XML传输到Java是什么呢?它并不关心XML元素或属性是否没有Java字段,它也不关心是否存在没有XML元素或属性的Java字段.
让我们尝试将以下XML解组为以下实例java.awt.Point:
<p hi="Yo">
<y>123</y>
<peach>weor</peach>
</p>
Run Code Online (Sandbox Code Playgroud)
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]"
Run Code Online (Sandbox Code Playgroud)
我们告诉JAXB.unmarshal()解析一个java.awt.Point实例.输入XML包含一个<y>可以匹配的元素,Point.y因此int解析并设置为Point.y.没有找到XML数据,Point.x所以没有触及.属性hi和XML元素没有匹配<peach>,因此它们根本不用于任何事情.
我们绝对没有Exception,并且最可能的是解析并从XML转移到Java.
Ian*_*rts 10
要处理未知字段,您可以添加List<Object>注释属性@XmlAnyElement(lax=true)
@XmlAnyElement(lax = true)
private List<Object> anything;
Run Code Online (Sandbox Code Playgroud)
输入中与该类的显式属性不对应的任何元素都将被清除到此列表中.如果元素是已知的,JAXBContext你将得到解组的形式(带@XmlRootElement注释的类或a JAXBElement<Foo>),如果元素不为上下文所知,你将得到一个org.w3c.dom.Element.
对于没有获得节点删除你应该罚款,只要你使用的类型,可以为空(Integer而不是int,Boolean不是boolean,等).
| 归档时间: |
|
| 查看次数: |
15379 次 |
| 最近记录: |