在CXF Web服务中检索WS请求

时间:2017-02-13 09:06:39

标签: apache web-services osgi cxf

我获得了一个CXF OSGi Web服务(基于servicemix中的示例演示:https://github.com/apache/servicemix/tree/master/examples/cxf/cxf-jaxws-blueprint

Web服务工作正常,我调用了服务的所有可用实现方法。

我的问题是我如何在WS方法中检索请求并以字符串XML格式进行解析。

我发现这可以在拦截器内部进行日志记录,但我也希望在我的方法中使用WS-Request。

3 个答案:

答案 0 :(得分:1)

为了在数据库中存储请求,我建议扩展new CXF message logging

您可以实现写入数据库的自定义LogEventSender

答案 1 :(得分:0)

我有类似的要求,我需要在调用方法后将数据保存到DB中。我曾使用ThreadLocalLoggingInInterceptor以及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);
    }

}

答案 2 :(得分:0)

不是这个问题的答案,但我最终通过使用JAXB完成了我的任务,并在那里做了一些操作。