JAXB:使用QName解组消息?

JAXB:使用QName解组消息?,jaxb,Jaxb,我如何解组使用QName本地部分封送的消息,这与预期的不同 我的例子如下: 给定一个要解组的对象,该对象已使用封送处理方法创建,如 marshaller.marshal( new JAXBElement( new QName("urn:somenamespace","DifferentNameMessage"), OriginalMessageType.class,

我如何解组使用QName本地部分封送的消息,这与预期的不同

我的例子如下:

给定一个要解组的对象,该对象已使用封送处理方法创建,如

     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);  
尝试的事项:

  • 是否验证封送的文档是否正确
  • 如果对封送和反封送使用相同的JAXBContext,会发生什么情况

  • 1.我使用不同的JAXBContext进行封送和解封送。2.我没有核实,我现在就核实。3.我将返回并使用解决问题的同一个jaxbcontext测试marshall/unmarshall。我使用了不正确的JAXBContext!非常感谢。