2011-11-21 37 views
3

我正在寫一個java軸客戶端,我如何將原始xml保存到數據庫中,直到現在我已經找到了兩種記錄raw xml的方法,但它們是控制檯或文件,但我需要將每個請求和響應持久化到mysql數據庫中,在那裏我可以使用連接作爲用戶參數。如何在MySQL數據庫中保留SOAP消息 - 使用Axis客戶端

這裏是我已經做了。

  1. log raw ws xml to console
  2. log raw ws xml to a file

好吧,我已經找到了解決辦法,首先,我們需要使用自定義處理程序,我前面提到的(1),我們可以在消息上下文 像設置屬性

public class FedexWsHandler extends GenericHandler { 

    public QName[] getHeaders() { 
     return null; 
    } 

    public boolean handleRequest(MessageContext context) { 
    try { 
     SOAPMessageContext smc = (SOAPMessageContext) context; 
     SOAPMessage reqMsg = smc.getMessage(); 
     context.setProperty("req-msg", reqMsg); 
     } catch (Exception ex) { 
     ex.printStackTrace(); 
      } 
    return true; 
    } 

    public boolean handleResponse(MessageContext context) { 
    try { 
     SOAPMessageContext smc = (SOAPMessageContext) context; 
     SOAPMessage reqMsg = smc.getMessage(); 
     context.setProperty("res-msg", reqMsg); 
     } catch (Exception ex) { 
     ex.printStackTrace(); 
      } 
    return true; 
    } 

} 

,然後在出客戶端,我們可以得到的財產,做你想要做什麼都一樣,

MyServiceLocator locator = new MyServiceLocator(); 
MyService service = locator.getMyService(); 
service.getResults("foo", "bar"); // call the service 

// I want to get that message I have set in request and response handler methods 
MessageContext ctx = locator.getCall().getMessageContext(); 
SOAPMessage reqMsg = (SOAPMessage) requestContext.getProperty("req-msg");   
SOAPMessage resMsg = (SOAPMessage) requestContext.getProperty("res-msg");   

但它不是這樣做,因爲這不是線程安全一個安全的方式。根據其docs

....所以,如果任何人可以建議我一些更好的解決方案。

+0

這是出於審計目的嗎? – trojanfoe

+0

是的,可以共享所有請求和響應消息的跟蹤日誌。 –

回答