【问题标题】:How to debug JAXB unmarshalling when I have no access to the unmarshaller?当我无法访问解组器时如何调试 JAXB 解组?
【发布时间】:2012-02-23 03:31:54
【问题描述】:

我遇到了 JAXB 解组的问题,我不知道如何解决。它与解组 SOAP 标头有关。在我的SOAPHandler 中,我有一个SOAPMessageContext 对象,它有一个getHeaders() 方法。此方法接受 QNameJAXBContext 作为参数,并将自动解组任何匹配的标头。

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

我有点难过,因为我无法控制任何解组;我无法设置验证器(并查看是否存在架构问题)或其他任何事情,因为一切都发生在“黑匣子”中。我只能将JAXBContext 传递给该方法。

即使没有抛出异常,我还能做些什么来弄清楚为什么解组失败?

谢谢,

埃里克

【问题讨论】:

    标签: java jaxb unmarshalling


    【解决方案1】:

    好的 - 经过一番摸索后,我意识到我可以尝试自己复制 getHeaders() 方法并在解组器上启用验证/等以找出问题所在。

    我最终使用以下方法将标头提取为 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() 方法为我神奇地完成所有事情。

    希望这对其他人有帮助。

    谢谢,

    埃里克

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多