![](/img/trans.png)
[英]Does JAXB always ignore 'extra' elements not specified in @XmlType/propOrder?
[英]JAXB Ignore 'extra' elements from Response XML
我收到一個 XML 響應,並且它一直在非常頻繁地更改(節點不斷增加或減少)。 在響應 xml 中的每次更新之后,我的代碼都會中斷,因為我映射的 Java 類沒有所有文件。
如果響應 XML 中發生任何更改,有什么方法可以避免我的代碼中斷。
任何幫助將不勝感激。
謝謝。
使用JAXB.unmarshal()
可以簡單地從 XML 創建 Java 對象。
默認情況下,它是非常自由的。
引用javadoc :
此外,解組方法具有以下特點:
- 不對輸入 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>
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 包含一個元素<y>
,它可以與Point.y
匹配,因此解析了一個int
並將其設置為Point.y
。 沒有找到Point.x
XML 數據,所以它沒有被觸及。 屬性hi
和 XML 元素<peach>
不匹配,因此它們根本沒有用於任何東西。
我們在這里絕對沒有Exception
,並且盡可能多地解析並從 XML 傳輸到 Java。
為了應對未知字段,您可以添加一個List<Object>
屬性注釋@XmlAnyElement(lax=true)
@XmlAnyElement(lax = true)
private List<Object> anything;
輸入中與類的顯式屬性不對應的任何元素都將被掃入此列表。 如果JAXBContext
知道該元素,您將獲得未編組的形式( @XmlRootElement
注釋類或JAXBElement<Foo>
),如果該元素不為上下文所知,您將獲得org.w3c.dom.Element
.
對於被刪除的節點,只要您使用可以為 null 的類型( Integer
而不是int
, Boolean
而不是boolean
等),您應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.