Я пишу клиент оси Java, как я могу сохранить сырой XML в базу данных, до сих пор я нашел два способа записи сырых XML, но они для консоли или в файл, но мне нужно сохранять каждый запроси ответ в базу данных mysql, где я мог бы использовать соединение в качестве пользовательского параметра.
вот что я уже сделал.
- log raw ws xml to console
- log raw ws xml в файл
Ну, я нашел решение, во-первых, нам нужно использовать пользовательский обработчик, как я упоминал ранее (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");
Ноэто не безопасный способ сделать это, поскольку это не Thread Safe .согласно его документам
.... так что, если кто-нибудь может предложить мне лучшее решение.