我使用标准的JAXB API来处理XML。我需要编组然后取消编组一个对象(因此结果应该是同一个对象)。我首先编组成一个字符串,然后执行相反的操作 - 从字符串解组为对象。
问题是Marshaller.marshal(obj,os)只给我孩子(用XML括起来)。当我尝试解组时,我收到了关于缺少父标记的错误。
E.g。 (1)对象“FieldSet”的Marshalled String:
<?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 :(得分:0)
要提供根元素信息,您可以执行以下操作之一:
1 - 使用@XmlRootElement
@XmlRootElement
public class FieldSet {
}
2 - 使用JAXBElement
QName qName = new QName("root");
JAXBElement<FieldSet> jaxbElement = new JAXBElement<FieldSet>(qName, FieldSet.class, fieldSet);