2014-01-06 37 views
0

在码头1.X部署到码头ServletContainer应用,有可能部署ServletContainer使用类似到码头:无法在新泽西2.X

Application application = ... 
server.addServlet(new ServletHolder(new ServletContainer(application)), "/foo); 

在新泽西2.X的ServletContainer类预期一个ResourceConfig,它是Application的一个子类。然而,前者是Jersey实现的一部分,而后者是JAX-RS规范的一部分,这意味着现在部署到Jetty取决于Jersey内部,这是我想避免的。

我在从泽西岛1迁移到泽西岛2时错过了一些东西吗?

+1

为什么不只是通过类引用而不是通过对象实例添加servlet? (这就是'WEB-INF/web.xml'的工作原理,Jersey必须支持这个) –

+0

我想添加特定的实例,而不是类,因为我想很好地控制对象的构建方式。 – insitu

回答

0

ServletContainer也是泽西特有的。无论如何,您可以使用ResourceConfig#forApplicationResourceConfig#forApplicationClass直接从JAX-RS应用程序创建ResourceConfig。然后你的代码如下所示:

server.addServlet(new ServletHolder(
        new ServletContainer(
         ResourceConfig.forApplication(application))) 
        , "/foo"); 
+0

我的目标是完全避免依赖于ResourceConfig,因为ResourceConfig是泽西特定的类。使用你的解决方案不会消除这种依赖性。 – insitu

+0

我明白你想说什么。我的意思是'ServletContainer'也是泽西特定的,使用'ResourceConfig'更方便。如果你想使用'Application',你可以自由地创建一个pull请求(https://github.com/jersey/jersey,更好的方式)或者提交一个改进(https://java.net/jira/browse/JERSEY)直。 –

+0

我的哑巴道歉,你解决我的问题是完全正确的:由部署应用程序的服务器实现的接口只能依赖JAX-RS,而Jetty/Jersey实现可以依赖泽西特定的东西。 – insitu