2012-12-11 102 views
4

我正在閱讀一些XML數據(如果您熟悉FXG文件)。數據如何讓JAXB中的unmarshaller忽略XML根元素名稱?

部分已改變標籤名稱:

<varying_name1 scaleX="1.0046692" x="177.4" y="74.2"/> 
<varying_name2 scaleX="1.0031128" x="171.9" y="118.9"/>  

我創建了一個名爲變換到不同的標籤名段內代表了數據類。在我的JAXB類來保存數據,我有:

@XmlAnyElement(lax=true)  
@XmlJavaTypeAdapter(TransformAdapter.class)  
protected List<Transform> transforms; 

在我的適配器,我試圖解組數據:

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = (Transform) unmarshaller.unmarshal(v); 

但是,我的代碼在這裏拋出一個異常,因爲在根名字我元素變化。這不是一個常數。我得到:

unexpected element (uri:"http://ns.adobe.com/fxg/2008", local:"m6_mc"). Expected elements are (none) 

我該如何才能解開我的數據,就好像根元素具有預期的名稱一樣?

回答

7

默認情況下,JAXB(JSR-222)實現將根據根元素確定要解組的類。這與通過@XmlRootElement@XmlElementDecl註釋提供的元數據匹配。

或者你是採用類參數的解組方法之一。這告訴JAXB你希望解組到哪個類。解組的結果將是JAXBElement的一個實例,除了Java對象將包含根元素信息以防萬一需要它之外。

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = unmarshaller.unmarshal(v, Transform.class).getValue(); 
+1

我不明白爲什麼第二次提供類參數告訴它忽略根元素,但是,它的工作原理!我應該複製你的例子,我更密切地下載了一下。 – Joe

+1

@Joe - 我已經擴大了我的答案,希望這有助於澄清事情。 –

+1

謝謝,Blaise! – Joe