2012-01-18 45 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