如何解组使用与预期不同的QName本地部分编组的消息?
我的例子如下:
给定一个使用编组方法(例如
)创建的解组的对象 marshaller.marshal( new JAXBElement(
new QName("urn:somenamespace","DifferentNameMessage"),
OriginalMessageType.class,
originalMsg),
result);
(据我理解这段代码片段,QName指示使根元素使用除指定之外的替代名称标记 在原始架构中。基本上使用替代名称方法。例如,在原始的QName之上 tag应该是“NameMessage”,但邮件是使用本地部分“DifferentNameMessage”编组的。)
我通常会使用一种解组方法,例如:
String xmlString = convertStreamToString(in);
final StringReader xmlReader = new StringReader(xmlString);
final StreamSource xmlSource = new StreamSource(xmlReader);
JAXBContext jaxbContext = JAXBContext.newInstance(OriginalMessageType.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
JAXBElement ret = null;
ret = unmarshaller.unmarshal(xmlSource, OriginalMessageType.class);
但是,如果我使用此方法,那么JAXBElement ret名称用于编组它的QName,但是DeclaredType用于 尽管如此,OriginalMessageType.class和unmarshalled消息包含预期子元素的空元素值 原始邮件包含这些子元素的有效值。
我想知道是否有可能在解组时指定替代QName以表明它是替代品然后在其位置使用原始标签?
答案 0 :(得分:1)
以下是正确的:
ret = unmarshaller.unmarshal(xmlSource, OriginalMessageType.class);
这是你在编组时制作JAXBContext的方式吗?
JAXBContext jaxbContext = JAXBContext.newInstance(OriginalMessageType.class);
要尝试的事情: