JAXB:使用QName解组消息?
我如何解组使用QName本地部分封送的消息,这与预期的不同 我的例子如下: 给定一个要解组的对象,该对象已使用封送处理方法创建,如JAXB:使用QName解组消息?,jaxb,Jaxb,我如何解组使用QName本地部分封送的消息,这与预期的不同 我的例子如下: 给定一个要解组的对象,该对象已使用封送处理方法创建,如 marshaller.marshal( new JAXBElement( new QName("urn:somenamespace","DifferentNameMessage"), OriginalMessageType.class,
marshaller.marshal( new JAXBElement(
new QName("urn:somenamespace","DifferentNameMessage"),
OriginalMessageType.class,
originalMsg),
result);
(据我所知,这段代码片段中,QName指示让根元素使用指定以外的替换名标记
在原始模式中。基本上使用替换名称方法。例如,在原始模式上方的QName中
标记应该是“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 name是用来封送它的QName,而DeclaredType是用来封送它的
OriginalMessageType.class和解组消息包含预期子元素的空元素值,即使
原始消息包含这些子元素的有效值
我想知道是否有可能在解组过程中指定替代品QName,以表明它是一个替代品,然后在其位置使用原始标记?以下是正确的:
ret = unmarshaller.unmarshal(xmlSource, OriginalMessageType.class);
这就是您在封送数据时制作JAXBContext的方式吗
JAXBContext jaxbContext = JAXBContext.newInstance(OriginalMessageType.class);
尝试的事项:
1.我使用不同的JAXBContext进行封送和解封送。2.我没有核实,我现在就核实。3.我将返回并使用解决问题的同一个jaxbcontext测试marshall/unmarshall。我使用了不正确的JAXBContext!非常感谢。