我有一些 Jersey (2.7) 和 Jetty (9.2.5.v2014112) 的测试代码,我正在尝试将其移植到 CXF (3.0.x) 和 Jetty(相同版本)。有一个部分我无法弄清楚,相当于rc.register(resource)
下面一行:
ServletContextHandler sch = new ServletContextHandler();
sch.setContextPath("/xxx");
resource = new TheResource();
ResourceConfig rc = new ResourceConfig();
rc.register(resource);
ServletContainer sc = new ServletContainer(rc);
ServletHolder holder = new ServletHolder(sc);
sch.addServlet(holder, "/*");
Server server = new Server(port);
server.setHandler(sch);
server.start();
server.join();
对于 CXF/Jetty 案例,我知道我需要执行以下操作:
CXFNonSpringJaxrsServlet context = new CXFNonSpringJaxrsServlet();
// EQUIVALENT OF:
// ResourceConfig rc = new ResourceConfig();
// rc.register(myresource)
// SOMETHING.setResourceConfig(rc)
ServletHolder holder = new ServletHolder(context);
ServletContextHandler handler = new ServletContextHandler("/restroot");
handler.addServlet(holder, "/*");
// Using ContextHandlerCollection cos my jetty needs to serve more
// than just this REST service
ContextHandlerCollection collection = new ContextHandlerCollection();
collection.addHandler(handler);
Server server = new Server(8080);
server.setHandler(collection);
server.start();
server.join();
有谁知道这如何/是否可能?
只是为了澄清我在这里想做的事情:我正在尝试在嵌入式 Jetty 实例上发布 JAX-RS 服务,并且我需要完全控制在 JAX-RS bean 的生命周期中。
Maarten
从 CXF 版本 3.0.4 开始,有额外的构造函数CXFNonSpringJaxrsServlet
这使得这变得更容易:
public SNAPSHOTApp(int port) throws Exception {
resource = new TheResource();
Set<Object> resourceSingletons = new HashSet<>();
resourceSingletons.add(resource);
CXFNonSpringJaxrsServlet context = new CXFNonSpringJaxrsServlet(resourceSingletons);
ServletHolder servlet = new ServletHolder(context);
ServletContextHandler handler = new ServletContextHandler();
handler.addServlet(servlet, "/*");
handler.setContextPath("/snapshot");
Server server = new Server(port);
server.setHandler(handler);
server.start();
server.join();
}
非常感谢@Sergey Beryozkin 根据我在 CXF 用户邮件列表上的问题添加了此内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)