我得到了一个CXF OSGi Web服务(基于servicemix中的示例演示:https://github.com/apache/servicemix/tree/master/examples/cxf/cxf-jaxws-blueprint(
Web 服务工作正常,我调用该服务的所有可用实现方法。
我的问题是如何在 WS 方法中检索请求并以字符串 XML 格式解析。
我发现这在拦截器中是可能的,但我也想在我的方法中使用 WS-Request。
为了将请求存储在数据库中,我建议扩展新的 CXF 消息日志记录。
您可以实现写入数据库的自定义 LogEventSender。
我有类似的要求,一旦调用方法,我需要将数据保存到数据库中。我用ThreadLocal
LoggingInInterceptor
和LoggingOutInterceptor
.例如,在 LoggingInInterceptor 中,我曾经将消息设置为 ThreadContext,在 webservice 方法中使用 LoggingContext.getMessage()
获取消息,而在 LoggingOutInterceptor 中,我曾经删除消息(注意:这里需要小心,您需要从线程上下文中明确删除消息,否则您最终会出现内存泄漏,并且客户端代码拦截器被逆转。
public class LoggingContext {
private static ThreadLocal<String> message;
public static Optional<String> getMessage() {
return Optional.ofNullable(message.get());
}
public static void setMessage(final String message) {
LoggingContext.message = new ThreadLocal<>();
LoggingContext.message.set(message);
}
}
不是这个问题的答案,但我最终通过使用 JAXB 完成了我的任务并在那里做了一些操作。