Grizzly Jersey突然要求applicatonContext.xml

时间:2015-10-24 20:37:47

标签: jersey grizzly

在我现有的应用程序中,此代码可以正常工作:

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多个

2 个答案:

答案 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会导致所描述的行为。