2010-11-30 75 views
5

我们使用spring来配置jetty并加载所有东西,并且我试图使用jersey作为web服务并使用jetty/spring库我可以将一些服务类自动装入我的球衣资源中,但我在启动服务器时遇到问题,因为它始终表示ServletContext为空。使用spring加载jersey/jax-ws的jetty时,ServletContext为null

这里是我的Spring配置XML:

 <property name="handler"> 
     <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerList"> 
      <property name="handlers"> 
       <list> 
        <bean class="org.eclipse.jetty.servlet.ServletContextHandler"> 
         <property name="eventListeners"> 
          <list> 
           <bean class="org.springframework.web.context.ContextLoaderListener" /> 
           <bean 
            class="org.springframework.web.context.request.RequestContextListener" /> 
          </list> 
         </property> 
         <property name="initParams"> 
          <map> 
           <entry> 
            <key> 
             <value>contextConfigLocation</value> 
            </key> 
            <value>classpath:applicationContext.xml</value> 
           </entry> 
          </map> 
         </property> 
        </bean> 
        <bean class="org.eclipse.jetty.servlet.ServletHandler"> 



         <property name="servlets"> 
          <list> 
           <bean class="org.eclipse.jetty.servlet.ServletHolder"> 
            <property name="name" value="Jersey" /> 
            <property name="servlet"> 
             <bean 
              class="com.sun.jersey.spi.spring.container.servlet.SpringServlet" /> 
            </property> 
            <property name="initParameters"> 
             <map> 
              <entry> 
               <key> 
                <value>com.sun.jersey.config.property.packages</value> 
               </key> 
               <value>com.mycompany.ws.resource</value> 
              </entry> 
              <entry> 
               <key> 
                <value>contextConfigLocation</value> 
               </key> 
               <value>classpath:applicationContext.xml</value> 
              </entry> 
             </map> 
            </property> 

           </bean> 
          </list> 
         </property> 

我跟着这里的说明:http://blogs.oracle.com/enterprisetechtips/entry/jersey_and_spring整合的球衣和春天,但不同的是,我和春天有配置的嵌入式Jetty服务器。

我不知道为什么我不断收到以下错误。我认为jetty ServletContextHandler是他们文档中的servlet上下文。

2010-11-30 23:19:05,177 [Thread-0] INFO [org.springframework.web.context.ContextLoader]: Root WebApplicationContext: initialization completed in 177 ms 
Nov 30, 2010 11:19:05 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 
    com.traveladnetwork.ws.resource.ad.server 
Nov 30, 2010 11:19:05 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Root resource classes found: 
    class com.mycompany.ws.resource.TargetResource 
    class com.mycompany.ws.resource.ReportResource 
    class com.mycompany.ws.resource.HelloWorldResource 
Nov 30, 2010 11:19:05 PM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Provider classes found: 
Nov 30, 2010 11:19:05 PM com.sun.jersey.spi.spring.container.servlet.SpringServlet getContext 
INFO: Creating new child context from classpath:applicationContext.xml 
Nov 30, 2010 11:19:05 PM com.sun.jersey.spi.spring.container.servlet.SpringServlet initiate 
**SEVERE: Exception occurred when intialization 
java.lang.IllegalArgumentException: ServletContext must not be null** 
    at org.springframework.util.Assert.notNull(Assert.java:112) 
    at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:96) 
    at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:86) 
    at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:68) 
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.getDefaultContext(SpringServlet.java:128) 
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.getChildContext(SpringServlet.java:119) 
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.getContext(SpringServlet.java:113) 
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:99) 
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:253) 
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:521) 
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:199) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:308) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:471) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:241) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:421) 
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:245) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) 
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:699) 
    at org.eclipse.jetty.servlet.ServletHandler.doStart(ServletHandler.java:155) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:165) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:92) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:228) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) 
    at com.mycompany.common.service.SpringServiceImpl.startService(SpringServiceImpl.java:52) 
    at com.traveladnetwork.common.service.StartImpl.run(StartImpl.java:42) 
    at java.lang.Thread.run(Thread.java:637) 
2010-11-30 23:19:05.412:INFO::Started [email protected]:9932 
2010-11-30 23:19:05,413 [Thread-0] INFO [com.mycompany.common.service.StartImpl]: Started in 1950 ms 

回答

1

这可能是因为你正在运行在Spring servlet容器(而不是其他的方式左右),它找不到ServletContext中。

你有两个选择:

  1. 尝试用它加载了春天里面的纲领性引导启动Jetty的servlet上下文(Deploying a servlet programmatically with Jetty
  2. 分裂您的applicationContext.xml分为两个集装箱的定义:那些这是启动Jetty所必需的,以及那些在没有有效的ServletContext的情况下无法启动的。那些需要一个有效的servlet上下文的应该可能在bean类“ServletContextHandler”的“initParams”中,而目前你已经定义了两次相同的applicationContext.xml。
相关问题