2015-09-22 53 views
0

如果有人分享他解決以下問題的經驗,我將非常感激。 我在JDK實現(這是Metro,我相信)中有一個SOAP服務。從java soap handler獲取響應

爲了記錄目的,我們需要提取傳入請求和生成響應的正文。 我嘗試通過在服務器端實現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()方法來獲得訪問請求和響應? 單個處理程序是否攔截請求及其響應? 我誤解了這個例子嗎?

And ... SOAPHandler - 它是每個請求(請求 - 響應對)的特定實例嗎? 謝謝

+0

是的,單一的方法攔截請求和響應。 – ACV

回答

1

嘗試此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:"); 
    }