2012-01-18 46 views
1

我使用標準的JAXB API來處理XML。我需要編組,然後解組一個對象(所以結果應該是同一個對象)。我首先編入一個字符串,然後做相反的事情 - 從字符串解組成一個對象。僅限JAXB XML編組對象,但解組需要完整結構?

問題是Marshaller.marshal(obj,os)給我的子只有(以XML包含)。當我嘗試解組時,我會收到有關缺少預期的父代碼的錯誤。

E.g. (1)整理String對象 「FieldSet中」:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<FIELD1>field1</FIELD1> 
<FIELD2>field2</FIELD2> 

(2)嘗試這個XML字符串解組成 「FieldSet中」 對象:

javax.xml.bind.UnmarshalException:標籤名稱「FIELD1」是不允許的。可能的標記名稱爲: - 鏈接的例外: [com.sun.msv.verifier.ValidityViolation:標記名稱「FIELD1」不允許。可能的標記名稱爲:「Parent」]

在架構中,「Parent」是應位於「FieldSet」之前的頂級元素。

爲什麼這些標準JAXB操作不是對稱的,我需要做些什麼來同步它們並避免僅子女/缺少父母問題?謝謝。

回答

0

爲了供應可以執行以下中的一個根元素信息:

1 - 註釋您正在與@XmlRootElement

@XmlRootElement 
public class FieldSet { 
} 

2註釋類 - 裹您正在使用編組對象JAXBElement

QName qName = new QName("root"); 
JAXBElement<FieldSet> jaxbElement = new JAXBElement<FieldSet>(qName, FieldSet.class, fieldSet); 
+0

我無權訪問JAXB類,它們是自動生成的。我只使用對象。我應該註釋我的實例嗎? – 2012-01-18 16:12:44

+0

@geneb如果你不想註釋你的實例,你可以使用'JAXBElement'方法。 – 2012-01-18 16:15:00

+0

當我嘗試用JAXBElement封裝對象時,發生以下異常: javax.xml.bind.MarshalException:marshal()的對象參數不可編組 – 2012-01-18 16:27:58