1

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

4

1 回答 1

1

您可以使用 SAAJ API 直接操作 SOAP 消息。AbstractSoapInterceptor通过实现该方法进行扩展handleMessage()并将其添加到 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

于 2013-06-14T18:02:31.243 回答