2012-02-22 20 views
1

我遇到了JAXB解组的问题,我不知道如何解决。它涉及到解组SOAP头。在我的SOAPHandler中,我有一个SOAPMessageContext对象,它有一个getHeaders()方法。该方法需要QNameJAXBContext作为参数,并且会自动解组任何匹配标头。如何在无法访问解组器的情况下调试JAXB解组?

我的问题是,我正在传递适当的标题,但未编组的对象返回空(即:所有字段为空)。

我有点难住,因为我无法控制任何解组;我无法设置验证器(并查看是否存在模式问题)或其他任何事情,因为一切都发生在“黑匣子”中。我所能通过的就是该方法的JAXBContext

有什么我可以做的,弄清楚为什么解组失败,即使没有异常被抛出?

感谢,

埃里克

回答

0

好了 - 这样一串挠头的后,我意识到,我可以尝试复制getHeaders()方法,我自己并启用验证的/ etc上的解组,找出问题出在哪里。

我结束了使用提取的标题作为一个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解组,并启用模式验证,并仅在getHeaders不依赖()方法为我做所有事情。

希望这可以帮助别人。

感谢,

埃里克