我正在编写一个java axis客户端,我如何将原始xml持久化到数据库中,到目前为止,我已经找到了两种记录原始xml的方法,但它们是用于控制台或文件的,但是我需要将每个请求和响应保存到mysql数据库中,在这里我可以使用连接作为用户参数。
以下是我已经做过的事。
我找到了一个解决方案,首先我们需要使用前面提到的自定义处理程序(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"); 但是这样做并不安全,因为这不是线程安全。根据它的文档
……所以如果有人能给我一个更好的解决方案。
发布于 2012-10-05 05:39:51
JAXB : StringWriter输出有一个截断的标记值
请查看上面的文章,您可以将xml转换为java字符串,并且可以使用任何mysql数据类型来保存转换为string的xml。如果字符串非常大,可以使用blob。
https://stackoverflow.com/questions/8208653
复制相似问题