在我现有的应用程序中,此代码可以正常工作:
GrizzlyHttpServer grizzlyHttpServer = new GrizzlyHttpServer(new Host("localhost", 80));
但是,如果我将其更改为使用Grizzly Jersey类路径中的代码来获取JAX-RS的内容:
ResourceConfig resourceConfig = new ResourceConfig();
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
URI.create("http://localhost:80/rest"),
resourceConfig,
false
);
grizzlyHttpServer = new GrizzlyHttpServer(httpServer, new Host("localhost", 80));
然后在createHttpServer()方法中止
引起:java.io.FileNotFoundException:类路径资源 [applicationContext.xml]无法打开,因为它不存在
我没有告诉它使用Spring。这里有什么魔力?
这里是完整的堆栈跟踪:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException从类路径资源解析XML文档 [applicationContext.xml中];嵌套异常是 java.io.FileNotFoundException:类路径资源 无法打开[applicationContext.xml],因为它不存在 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) 在 org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 在 org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131) 在 org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436) 在 org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93) 在 org.glassfish.jersey.server.spring.SpringComponentProvider.createXmlSpringConfiguration(SpringComponentProvider.java:164) 在 org.glassfish.jersey.server.spring.SpringComponentProvider.createSpringContext(SpringComponentProvider.java:155) 在 org.glassfish.jersey.server.spring.SpringComponentProvider.initialize(SpringComponentProvider.java:98) 在 org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:430) 在 org.glassfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:163) 在 org.glassfish.jersey.server.ApplicationHandler $ 3.run(ApplicationHandler.java:323) 在org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:289)at at org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:286)at org.glassfish.jersey.internal.Errors.process(Errors.java:315)at org.glassfish.jersey.internal.Errors.process(Errors.java:297)at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 在 org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:320) 在 org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:285) 在 org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer。(GrizzlyHttpContainer.java:331) 在 org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:141) 在 com.optimaize.soapworks.exampleproject.server.boot.GrizzlySoapWebServer.start(GrizzlySoapWebServer.java:39) 在 com.optimaize.soapworks.exampleproject.server.boot.Boot.boot(Boot.java:38) 在 com.optimaize.soapworks.exampleproject.server.boot.Boot.main(Boot.java:18) 引起:java.io.FileNotFoundException:类路径资源 无法打开[applicationContext.xml],因为它不存在 在 org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328) ......还有30多个
答案 0 :(得分:0)
正如人们可以猜到的那样,添加一个虚拟空的applicatonContext.xml会使问题消失:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
这对我来说太神奇了。我会把问题打开。
答案 1 :(得分:0)
用户peeskillet找到了答案。
我有这个Maven依赖
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
</dependency>
可能来自示例中的复制粘贴依赖项。我确实使用Spring,但我自己处理DI。我的项目已经拥有所有Spring和其他依赖项。
只需删除此依赖项就可以解决问题。
解释是new GrizzlyHttpServer()
是纯粹的Grizzly代码,而GrizzlyHttpServerFactory.createHttpServer()
是来自灰熊球衣项目的代码。所以有两个
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
前面提到的jersey-spring3
会导致所描述的行为。