我正在使用 jax-ws 处理程序来拦截 SOAP 消息,以便我可以从 header 中获取某些元素。有没有办法反序列化 Header 并将其解析为 wsdl2java 或 xmlbeans 生成的对象?我目前正在从 AXIS 迁移到 CXF。在 AXIS 下,我可以获取 Header xml 并使用 Factory 类解析它。我还没有找到使用 CXF wsdl2java 生成的对象来执行此操作的好方法。我意识到我可以使用 getElementsByTagName 来检索每个节点,但使用实际对象更容易。
最佳答案
您可以使用 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
关于java - 在 jaxws 处理程序中反序列化 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109454/