在jaxws处理程序中反序列化标头

时间:2013-06-14 13:19:11

标签: java soap jax-ws cxf

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

1 个答案:

答案 0 :(得分: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