我正在使用jax-ws处理程序来拦截SOAP消息,以便可以从Header中获取某些元素。有没有一种方法可以反序列化Header并将其解析为wsdl2java或xmlbeans生成的对象?我目前正在从AXIS迁移到CXF。在AXIS下,我可以获取Header xml并使用Factory类对其进行解析。我没有找到一种很好的方法来处理从CXF wsdl2java生成的对象。我意识到我可以使用getElementsByTagName来检索每个Node,但是使用实际对象更容易。
最佳答案
您可以使用SAAJ API直接操作SOAP消息。通过实现AbstractSoapInterceptor
方法扩展handleMessage()
并将其添加到InInterceptor链中。
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