小编jay*_*ity的帖子

在基于 RestEasy 的服务中为 ThreadLocal 存储使用服务器请求和响应过滤器

我目前正在开发基于 RESTeasy 的 RESTful 服务。我有一个过滤器类,它用作服务器请求过滤器和服务器响应过滤器(即它实现ContainerRequestFilterContainerResponseFilter接口)。

在请求开始时,我使用过滤器将一个对象放入ThreadLocal. 这个对象在整个请求中被资源使用。在请求结束时,在发送响应之前,过滤器从 中删除对象ThreadLocal

我的问题是是否可以保证请求过滤器、资源和响应过滤器都将在同一线程中执行?是否有可能在请求过滤器将对象放入 之后ThreadLocal,另一个线程将执行请求(因此无法访问该对象)?

我确信情况确实如此,但后来我看到了这个http://jersey.576304.n2.nabble.com/Does-filter-method-of-ContainerRequestFilter-run-in-resource-method-thread-td7582648.html(泽西官方论坛)现在我有疑问。

jax-rs jersey thread-local resteasy

5
推荐指数
1
解决办法
1684
查看次数

如果在控制器中某处引发异常,是否执行ContainerResponseFilter?

我有一个基于RestEasy的服务,其中正在ContainerResponseFilter中进行一些清理工作。问题是,如果资源抛出了未知的运行时异常(即我没有映射器的异常),则ContainerResponseFilter永远不会执行。

这是预期的行为吗?有没有解决方法?我在看以下问题(乔纳斯的回答):
如何在RESTful JAX-RS Web服务中记录未捕获的异常?

并且即使在控制器中引发异常时,看起来好像也会执行ContainerResponseFilter吗?

我想念什么吗?

jax-rs resteasy

5
推荐指数
1
解决办法
470
查看次数

当类有外部依赖时,如何编写有效的单元测试?

我是测试驱动开发的新手,无法弄清楚如何为我编写的类编写有效的测试.该类如下(Java):

public class MyServiceClassImpl implements MyService {
    private someExternalClient client;
    private anotherExternalClient anotherClient;

    public MyServiceClassImpl() {
        client = someExternalClient.getInstance();
        anotherClient = anotherExternalClient(client);
    }

    public String methodWhichDoesSomething(String query) {
        return anotherClient.getResponse(query);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于测试,我尝试了几个查询,并将我得到的响应与我期望的响应进行比较(我期待它,因为我知道anotherClient将返回什么).它工作正常但这在技术上是一个集成测试,因为我调用外部依赖.在这种情况下,我不明白如何编写"单元"测试.更具体地说,我不知道如何模拟依赖项,因为字段是私有的,没有setter,构造函数不接受任何参数.即使我创建了它们,我如何用我的模拟"提供"类的实例?我自己也写了这个课程,所以请告诉我是否应该重新设计课程,或者提供入门者和制定者?

junit integration-testing unit-testing easymock mocking

3
推荐指数
1
解决办法
3274
查看次数