启动嵌入式Grizzly服务器时,我希望Jersey使用现有的Spring容器。这在jersey-1.0(Grizzly,共享spring生成的上下文)中是可能的,但是在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上下文,但是它基于注释并且已经加载。如何让灰熊和/或泽西岛找到我的背景?
IVY Config是:
<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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句