【问题标题】:Deserialize header in jaxws handler在 jaxws 处理程序中反序列化标头
【发布时间】:2013-06-14 13:19:10
【问题描述】:

我正在使用 jax-ws 处理程序来拦截 SOAP 消息,以便我可以从 Header 中获取某些元素。有没有办法反序列化 Header 并将其解析为 wsdl2java 或 xmlbeans 生成的对象?我目前正在从 AXIS 迁移到 CXF。在 AXIS 下,我可以获取 Header xml 并使用 Factory 类对其进行解析。我还没有找到使用从 CXF wsdl2java 生成的对象的好方法。我意识到我可以使用 getElementsByTagName 来检索每个节点,但使用实际对象更容易。

【问题讨论】:

    标签: java soap jax-ws cxf


    【解决方案1】:

    您可以使用 SAAJ API 直接操作 SOAP 消息。通过实现handleMessage() 方法扩展AbstractSoapInterceptor 并将其添加到InInterceptors 链中。

    public class MyCustomInInterceptor extends AbstractSoapInterceptor {
    
    public void handleMessage(SoapMessage soapMessage) throws Fault {
        try {
            SOAPMessage message = soapMessage.getContent(SOAPMessage.class);
            SOAPPart sp = message.getSOAPPart();
            SOAPEnvelope se = sp.getEnvelope();
            SOAPBody sb = se.getBody();
            SOAPHeader sh = se.getHeader();
    
        } 
        catch(Exception e)
        {
            log.error(e);
            throw new Fault(e);
        }
    
        }
    
    
    }
    

    注意:您还需要将SAAJInInterceptor 附加到拦截器链上,否则soapMessage.getContent(SOAPMessage.class) 将返回null

    【讨论】:

    • 但我想使用 java2wsdl 生成的类而不是 CXF SOAPMessage、SOAPBody 等。有没有办法将 SOAPMessage 解析/转换为生成的类?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多