Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey带有嵌入式Jetty解决资源中的依赖项注入_Java_Jersey_Jetty - Fatal编程技术网

Java Jersey带有嵌入式Jetty解决资源中的依赖项注入

Java Jersey带有嵌入式Jetty解决资源中的依赖项注入,java,jersey,jetty,Java,Jersey,Jetty,我在尝试注入我资源的依赖性时,很难将Jersey与Jetty连接起来。我正在做的是: public class MyApplication extends ResourceConfig { public MyApplication() { register(new MyBinder()); } } 我的活页夹简化了: public class MyBinder extends AbstractBinder { @Override

我在尝试注入我资源的依赖性时,很难将Jersey与Jetty连接起来。我正在做的是:

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;
...
}
我的资源也简化了:

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错误:404

你知道我怎样才能把它整理好吗


谢谢

好的,我还让它在没有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服务器。

好的,我还使它在没有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服务器。

您的请求URL是什么?我有一个类似的项目,但它没有使用您正在进行的注入,也许它有助于您继续。0.0.0.0:8800/test?some=东西,但我发现dropwizard基本上解决了我的所有问题,实现了我的目标。甚至集成用于注入的Guice。令人惊叹的。我应该建议。。。我已经使用dropwizard和guice好几年了,我很喜欢它。度量库是必不可少的。你的请求URL是什么?我有一个类似的项目,但它没有使用你正在做的注入,也许它有助于你继续。0.0.0.0:8800/test?some=stuff,但是我想出了dropwizard,它基本上解决了我所有的问题,实现了我的目标。甚至集成用于注入的Guice。令人惊叹的。我应该建议。。。我已经使用dropwizard和guice好几年了,我很喜欢它。度量标准库是不可或缺的。