3
我正在寫一個java軸客戶端,我如何將原始xml保存到數據庫中,直到現在我已經找到了兩種記錄raw xml的方法,但它們是控制檯或文件,但我需要將每個請求和響應持久化到mysql數據庫中,在那裏我可以使用連接作爲用戶參數。如何在MySQL數據庫中保留SOAP消息 - 使用Axis客戶端
這裏是我已經做了。
好吧,我已經找到了解決辦法,首先,我們需要使用自定義處理程序,我前面提到的(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
....所以,如果任何人可以建議我一些更好的解決方案。
這是出於審計目的嗎? – trojanfoe
是的,可以共享所有請求和響應消息的跟蹤日誌。 –