我遇到了JAXB unmarshalling的问题,我不知道如何解决。它涉及解组SOAP标头。在我的SOAPHandler中,我有一个SOAPMessageContext对象,其中有一个getHeaders()方法。此方法将QName和JAXBContext作为参数,并自动解组任何匹配的标头。
我的问题是我传递了相应的标题,但是unmarshalled对象被返回为空(即:所有字段都为空)。
我有点难过,因为我无法控制任何解组;我无法设置验证器(并查看是否存在架构问题)或其他任何事情,因为一切都发生在“黑匣子”中。我所能传递的只是该方法的JAXBContext
。
即使没有抛出异常,我还能做些什么来弄清楚为什么解组会失败?
谢谢,
埃里克
答案 0 :(得分:0)
好的 - 所以在经过一番头疼之后,我意识到我可以尝试自己复制getHeaders()方法,并在unmarshaller上启用验证/等,以找出问题所在。
我最终使用以下内容将标头解压缩为xml节点:
SOAPHeader soapHeader = context.getMessage().getSOAPHeader();
Object z;
XMLUtil xmlUtil = new XMLUtil();
for( Iterator<SOAPElement> it = soapHeader.getChildElements(new ObjectFactory().createServiceContext(null).getName()); it.hasNext(); ){
SOAPElement sc = it.next();
z = xmlUtil.unmarshall(sc, ServiceContextType.class);
}
在我的xmlUtil类中,我可以创建自己的JAXB unmarshaller并启用模式验证,而不仅仅依靠getHeaders()方法为我做神奇的事情。
希望这对其他人有帮助。
谢谢,
埃里克