我无法使用JerseyTest (v2.25)和Guice依赖项注入。我目前的设置是由另一个堆栈过流问题上的一个答案所启发的。此设置仍然试图通过@Provides通过HK2连接带注释的类的依赖关系,从而失败了测试用例。如果我将.packages()调用从测试ResourceConfig中删除,那么侦听器似乎根本没有初始化,而且我的测试用例都返回了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()));
}
}发布于 2019-07-07 03:37:57
与编写自己的库不同,您可以使用现有的库泽西岛客舱
您需要弥合两个DI框架之间的差距。这个模块的目的就是通过引导基于Jetty的泽西服务器并初始化HK2和Guice之间的桥来实现这一点。 入门
compile 'io.logz:guice-jersey:1.0.8'注意您丢失了GuiceIntoHK2Bridge
注射器=(注射器) servletContext.getAttribute(Injector.class.getName());GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);guiceBridge.bridgeGuiceInjector(注射器);
https://stackoverflow.com/questions/56872093
复制相似问题