具有嵌入式Jetty的Jersey在Resource中解析依赖注入

时间:2015-08-10 19:02:53

标签: java jersey jetty

在尝试注入我的资源的依赖关系时,我遇到了使用Jetty连接Jersey的麻烦。我正在做的是:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyBinder());
    }
}

我的活页夹简化:

public class MyBinder extends AbstractBinder {
        @Override
        protected void configure() {
            bind(ManagerImpl.class).to(Manager.class);
        }
   }

我的资源简化了:

@Path("test")
public class MyResource {

    @Inject
    Manager manager;
...
}

我试着把它们连在一起:

ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ServletContainer jerseyServletContainer = new ServletContainer(new MyApplication());
ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
jerseyServletHolder.setInitParameter("jersey.config.server.provider.classnames", MyResource.class.getCanonicalName());
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(jerseyServletHolder, "/*");

Server server = new Server(threadPool);
ServerConnector connector = new ServerConnector(server);
connector.setPort(httpPort);
server.setConnectors(new Connector[]{connector});
server.setHandler(servletContextHandler);
server.start();

但是我一直收到HTTP ERROR:404

我有什么想法可以让它排序?

由于

1 个答案:

答案 0 :(得分:0)

好的,我也没有使用dropwizard和guice工作。由于某些原因,自版本2.XX以来,Jersey实现不包括GuiceComponentProviderFactory。否则就可以做这样的事情:

Injector injector =  Guice.createInjector( new ServletModule() { ...} );
IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory( resourceConfig, injector );
Server server = JettyHttpContainerFactory.createHttpServer( BASE_URI + "services/", resourceConfig, ioc );

从版本2.X开始,他们将HK2 IoC框架与GuiceBirdge集成在一起,所以你需要搞乱HK2和Guice:

GuiceBridge.getGuiceBridge().initializeGuiceBridge(aServiceLocator);

所以我只是坚持使用HK2,让它以这种方式连接在一起:

URI baseUri = UriBuilder.fromUri("http://localhost/").port(8800).build();
Server server = JettyHttpContainerFactory.createServer( baseUri, new MyApplication() );
server.start();

我的资源配置:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyBinder());
        register(MyResource.class);
    }
}

所以我只是错过了在注册我的活页夹之前注册我的资源。所以这样我就没有使用web.xml了很好的嵌入式jetty服务器。