Как сохранить SOAP-сообщения в базе данных MySQL - работа с Axis Client - PullRequest
3 голосов
/ 21 ноября 2011

Я пишу клиент оси Java, как я могу сохранить сырой XML в базу данных, до сих пор я нашел два способа записи сырых XML, но они для консоли или в файл, но мне нужно сохранять каждый запроси ответ в базу данных mysql, где я мог бы использовать соединение в качестве пользовательского параметра.

вот что я уже сделал.

  1. log raw ws xml to console
  2. 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 .согласно его документам

.... так что, если кто-нибудь может предложить мне лучшее решение.

1 Ответ

0 голосов
/ 05 октября 2012

JAXB Marshaller: вывод StringWriter имеет усеченное значение тега

Пожалуйста, посмотрите на этот пост, вы можете конвертировать XML в строку Java, а затем вы можете использовать любой тип данных MySQL, который может преобразовать ваш XML в строку. Вы можете использовать blob, если строка очень большая.

...