【发布时间】:2019-07-03 14:14:18
【问题描述】:
我无法将 JerseyTest (v2.25) 与 Guice 依赖注入一起使用。我当前的设置灵感来自另一个 stackoverflow question 的答案。这个设置仍然试图通过 HK2 连接 @Provides 注释类的依赖关系,但我的测试用例失败了。如果我从我的测试 ResourceConfig 中删除 .packages() 调用,似乎监听器根本没有初始化,我的测试用例都返回 404。
这是我当前的球衣测试设置:
public class MyTestSuite extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig().packages("com.example.api");
}
@Override
protected DeploymentContext configureDeployment() {
return ServletDeploymentContext.builder(configure())
.addListener(GuiceConfig.class)
.addFilter(GuiceFilter.class, "guiceFilter")
.addFilter(ServletContainer.class, "jerseyFilter", Collections.singletonMap("javax.ws.rs.Application", JerseyConfig.class.getName()))
.build();
}
}
以下是部署上下文中引用的类:
public class GuiceConfig extends GuiceServletContextListener {
static Injector injector;
@Override
protected Injector getInjector() {
injector = Guice.createInjector(new WebModule());
return injector;
}
}
public class JerseyConfig extends ResourceConfig {
@Inject
public JerseyConfig(ServiceLocator serviceLocator) {
Injector injector = (Injector) serviceLocator.getService(ServletContext.class).getAttribute(Injector.class.getName());
GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
serviceLocator.getService(GuiceIntoHK2Bridge.class).bridgeGuiceInjector(injector.createChildInjector(new HK2IntoGuiceBridge(serviceLocator)));
packages("com.example.api");
}
}
public class WebModule extends ServletModule {
@Override
protected void configureServlets() {
serve("/*").with(ServletContainer.class, Collections.singletonMap(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName()));
}
}
【问题讨论】: