相当于以下Jersey/Jetty代码的CXF/Jetty [英] CXF/Jetty equivalent of the following Jersey/Jetty code

查看:80
本文介绍了相当于以下Jersey/Jetty代码的CXF/Jetty的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些针对Jersey(2.7)和Jetty(9.2.5.v2014112)的测试代码,我想移植到CXF(3.0.x)和Jetty(相同版本).有一个我无法弄清的部分,等同于下面的rc.register(resource)行:

I've got some test code with Jersey (2.7) and Jetty (9.2.5.v2014112) that I'm trying to port to CXF (3.0.x) and Jetty (same version). There's one part that I can't figure out, the equivalent of the rc.register(resource) line below:

    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/码头案,我知道我需要做类似的事情:

For the CXF/Jetty case I know I need to do something like:

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();

有人知道如何/是否可行?

Does anybody know how/if this is possible?

只是为了澄清我在这里要做的事情:我正在尝试在嵌入式Jetty实例上发布JAX-RS服务,并且我需要完全控制来控制JAX的生命周期-RS bean.

Just to clarify what I'm trying to do here: I'm trying to publish a JAX-RS service on an embedded Jetty instance, and I need full control over the lifecycle of the JAX-RS bean.

马尔滕

推荐答案

从CXF 3.0.4版开始,CXFNonSpringJaxrsServlet上还有其他构造函数,使此操作变得更加容易:

From CXF version 3.0.4 onwards, there are additional constructors on the CXFNonSpringJaxrsServlet that make this a lot easier:

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用户邮件列表中的问题添加了此内容.

Big thanks to @Sergey Beryozkin for adding this based on my question on the CXF user mailing list.

这篇关于相当于以下Jersey/Jetty代码的CXF/Jetty的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆