从java soap handler获取响应

时间:2015-09-22 09:34:56

标签: java jax-ws soaphandler

如果有人分享他解决以下问题的经验,我将非常感激。 我在JDK实现中有一个SOAP服务(我相信是Metro)。

为了记录目的,我们需要提取传入请求和生成的响应的主体。 我尝试通过在服务器端实现SOAPHandler来获取它。 我将处理程序配置为Spring bean。 我发现的所有示例都基本上复制了Oracle文档中的示例:https://docs.oracle.com/cd/E23943_01/web.1111/e13734/handlers.htm#WSADV170

      public boolean handleMessage(SOAPMessageContext messageContext)
  {
     Boolean outboundProperty = (Boolean)
         messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);

     if (outboundProperty.booleanValue()) {
         System.out.println("\nOutbound message:");
     } else {
         System.out.println("\nInbound message:");
     }

     System.out.println("** Response: "+messageContext.getMessage().toString());
    return true;
  }

这里读取SOAP消息上下文的一个布尔属性,我认为它对应于请求或响应。​​

但是我的实验中的调试器永远不会进入与响应相对应的分支(else-branch)。这样的处理程序如何跟踪请求和响应?

我也想知道什么消息被读取为messageContext.getMessage():它是传入(请求)还是出站(响应)

我想现在是否可以通过实现handleMessage()方法来获取对请求和响应的访问权限? 单个处理程序是否拦截请求及其响应? 我误解了这个例子吗?

并且...... SOAPHandler - 它是每个请求(请求 - 响应对)的特定实例吗? 谢谢

1 个答案:

答案 0 :(得分:2)

尝试使用SoapHandler:

Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
 if (isRequest) {
//handle request
 } else {
//handle response
         }

这适用于LogicalHandler:

 Boolean outboundProperty = (Boolean)
         messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
     if (outboundProperty.booleanValue()) {
            System.out.println("\nOutbound message:");
     } else {
            System.out.println("\nInbound message:");
     }