java - 如何使用 Grizzly 嵌入式服务器在 Jersey-Spring 中配置现有的应用程序上下文?

标签 java jersey grizzly jersey-2.0

启动嵌入式 Grizzly 服务器时,我希望 Jersey 使用我现有的 Spring 容器。这在 jersey-1.0 ( Grizzly, sharing spring generated context ) 中是可能的,但在 Jersey 2.x 中似乎不起作用。

此代码适用于 Jersey 1.17:

HttpServer server = new HttpServer();
final NetworkListener listener = new NetworkListener("grizzly", NetworkListener.DEFAULT_NETWORK_HOST, PACS.RESTPort);
listener.setSecure(false);
server.addListener(listener);
ResourceConfig rc = new PackagesResourceConfig("edu.mayo.qia.pacs.rest");

// Let Jersey know about our existing context
SpringComponentProviderFactory handler = new SpringComponentProviderFactory(rc, PACS.context);
HttpHandler processor = ContainerFactory.createContainer(HttpHandler.class, rc, handler);
server.getServerConfiguration().addHttpHandler(processor, "");

server.start();

这是我在 Jersey 2 中的代码(我想不出 SpringComponentProviderFactory 的替代品):

HttpServer server = new HttpServer();

final NetworkListener listener = new NetworkListener("grizzly", NetworkListener.DEFAULT_NETWORK_HOST, PACS.RESTPort);
server.addListener(listener);

ResourceConfig rc = new ResourceConfig();
rc.packages("edu.mayo.qia.pacs.rest");
HttpHandler processor = ContainerFactory.createContainer(GrizzlyHttpContainer.class, rc);
server.getServerConfiguration().addHttpHandler(processor, "");

当我运行代码(使用 jersey-spring3)时,我得到这个异常:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from class path resource [applicationContext.xml];
nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist

Grizzly 正在尝试从 applicationContext.xml 加载我的 Spring 上下文,但它是基于注释的并且已经加载。我怎样才能让 Grizzly 和/或 Jersey 找到我的上下文?

IVY 配置是:

<dependency org="org.glassfish.jersey.core" name="jersey-client" rev="2.3"/>
<dependency org="org.glassfish.jersey.core" name="jersey-server" rev="2.3"/>
<dependency org="org.glassfish.jersey.core" name="jersey-common" rev="2.3"/>
<dependency org="org.glassfish.jersey.connectors" name="jersey-grizzly-connector" rev="2.3"/>
<dependency org="org.glassfish.jersey.containers" name="jersey-container-grizzly2-http" rev="2.3"/>
<dependency org="org.glassfish.jersey.ext" name="jersey-spring3" rev="2.3"/>

最佳答案

我遇到了完全相同的问题...您只需要将现有上下文与 Grizzly 链接起来即可。在我的例子中 ClassPathXmlApplicationContext:

yourContext = new ClassPathXmlApplicationContext("application-context.xml");

ResourceConfig rc = new ResourceConfig(HazelcastRestService.class);
rc.property("contextConfig", yourContext);

URI uri = new JerseyUriBuilder().host("0.0.0.0").port(8888).build();
httpServer = GrizzlyHttpServerFactory.createHttpServer(uri, rc);

关于java - 如何使用 Grizzly 嵌入式服务器在 Jersey-Spring 中配置现有的应用程序上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912770/

相关文章:

java - 基于接受参数的 REST 服务响应

servlets - 以编程方式将 servlet 添加到嵌入式灰熊

java - 如何在 Jenkins 上处理并发 Maven 构建?

java - getActivity().findViewById(int id) 即使在 fragment 完成构建后也会返回 null

java - 设置 JButton 的宽度以容纳一定数量的字符

java - 将行插入数据库后 JTable 不更新

java - 如何使用 Guice + Jersey + servlet 将 Swagger 集成到 Java 项目中并自动生成 REST API 文档

java - Jboss EAP6.4是否支持 Jersey Web服务的 "JSONObject"映射?

java - 如何向 Grizzly 服务器添加过滤器?

java - 用于 Comet 应用程序的 Node.js 与 Java