我正在使用标准的JAXB来处理XML。我需要封送,然后不封送一个对象(所以结果应该是相同的对象)。我首先将其封送成字符串,然后执行相反的操作--将字符串解封为对象。
问题是,Marshaller.marshal(obj,os)给我的是子级(包含在XML中)。当我试图反封送回封送时,会发现有关丢失的父标记的错误。
例如(1)为对象“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“是不允许的。可能的标签名是:“父”
在模式中,“父”是应该放在"FieldSet“前面的顶级元素。
为什么这些标准的JAXB操作是不对称的,我需要做什么来同步它们并避免子/丢失的父操作?谢谢。
发布于 2012-01-18 16:09:10
要提供根元素信息,可以执行以下操作之一:
1-注释您要用@XmlRootElement注释的类
@XmlRootElement
public class FieldSet {
}2-用JAXBElement实例包装正在编组的对象
QName qName = new QName("root");
JAXBElement<FieldSet> jaxbElement = new JAXBElement<FieldSet>(qName, FieldSet.class, fieldSet);https://stackoverflow.com/questions/8913241
复制相似问题