gpt4 book ai didi

java - 如何在 MySQL 数据库中保留 SOAP 消息 - 使用 Axis Client

转载 作者:行者123 更新时间:2023-12-03 20:25:03 25 4
gpt4 key购买 nike

我正在编写一个 java axis 客户端,我如何将原始 xml 持久化到数据库中,直到现在我已经找到了两种记录原始 xml 的方法,但它们用于控制台或文件,但我需要持久化每个请求并响应到 mysql 数据库,我可以在其中使用连接作为用户参数。

这是我已经完成的。

  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

....所以如果有人可以建议我一些更好的解决方案。

最佳答案

JAXB Marshaller : StringWriter output has a truncated tag value

请查看上面的帖子,您可以将 xml 转换为 java 字符串,然后您可以使用任何可以将 xml 转换为字符串的 mysql 数据类型。如果字符串非常大,您可以使用 blob。

关于java - 如何在 MySQL 数据库中保留 SOAP 消息 - 使用 Axis Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com