java - 在 jaxws 处理程序中反序列化 header

标签 java soap jax-ws cxf

我正在使用 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/

相关文章:

java - 在 Java 中将 SOAP WS 输出转换为 .xsd 兼容 XML

c# - Windows 应用商店应用程序中的 SOAP 编码

java - 无法找到 JAX-WS 的 Spring 命名空间

java - 第二次运行 BPEL WebService 的 404 错误

java - 如何设置 JavaFX TextField 的样式使其看起来像 iOS 的一样?

java - 为什么 Java DefaultTableModel 使用 Vector?

java - 如何使用 google Guice 创建相同类型的多个实例

java - 如何将具有不同空格量的字符串分成两部分?

java - 如何在 Java 中发送原始 SOAP 请求?

java - jax-ws: "keep"工具中的 "wsgen"标志究竟有什么作用?