gpt4 book ai didi

jersey - OSGi 4.2 环境中的基本 JAX-RS servlet

转载 作者:行者123 更新时间:2023-12-02 05:58:31 25 4
gpt4 key购买 nike

在 OSGi 4 容器中创建基本 JAX-RS 环境的最简单方法是什么,而无需求助于 Apache CXF 等重量级解决方案。

虽然在我看来,使用 HttpService 注册 Jersey 容器 servlet 应该可以解决问题,但我还无法将几个 bundle 拼凑在一起来实现这一点。

这是我的包 Activator 的本质,其中 Resources 类实现 Application 接口(interface)来解析哪些类具有 JAX-RS 注释:

public void start(BundleContext context) throws Exception {
// Find the HttpService
ServiceReference ref = context.getServiceReference(HttpService.class.getName());
HttpService service = (HttpService) context.getService(ref);

// Register a Jersey container
ServletContainer servlet = new ServletContainer(new Resources());
service.registerServlet("/services", servlet, null, null);
}

最佳答案

下面是一个适用于 Jersey 的示例应用程序:https://source.everit.biz/svn/everit-osgi/trunk/samples/jaxrs/

运行 mvn install 后,您将在 target/eosgi-testing-dist/... 处看到带有 Jetty 的可运行 equinox 容器。您可以在 lib 文件夹中找到使用了哪些包。

它使用此解决方案:https://source.everit.biz/svn/everit-osgi/trunk/remote/jersey/

这里是最简单的代码片段,它基于上面的解决方案来实现这一点(myObj 是包含注释的对象):

javax.ws.rs.core.Application application = new DefaultResourceConfig();
application.getSingletons().add(myObj);

com.sun.jersey.spi.container.servlet.ServletContainer servletContainer =
new ServletContainer(application);

Hashtable<String, String> initParams = new Hashtable<String, String>();
initParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
httpService.registerServlet("/rest", servletContainer, initParams, null);

请注意,如果您想要具有 JSON 转换等功能,“initparams.put”非常有用。

更新

SVN 链接的用户/密码:访客/访客

remote-jersey 项目不再维护,但仍然可以在 github 上使用:https://github.com/everit-org/osgi-remote-jersey

关于jersey - OSGi 4.2 环境中的基本 JAX-RS servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com