ServletContext равен нулю при использовании пружины для загрузки причала с помощью jersey / jax-ws - PullRequest
5 голосов
/ 01 декабря 2010

Мы используем Spring для настройки Jetty и загрузки всего, и я пытаюсь использовать джерси для веб-сервисов и использовать библиотеку Jetty / Spring, чтобы я мог автоматически связывать некоторые классы сервисов с моими ресурсами, но я 'У меня проблемы с запуском сервера, потому что он всегда говорит, что ServletContext равен нулю.

Вот моя весенняя конфигурация 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 для интеграции майки и пружины, но разница в том, что у меня есть встроенный джет-сервер с пружиной.

Я не уверен, почему я продолжаю получать следующую ошибку.Я думал, что причал ServletContextHandler был контекстом сервлета из их документации.

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 SelectChannelConnector@0.0.0.0:9932
2010-11-30 23:19:05,413 [Thread-0] INFO  [com.mycompany.common.service.StartImpl]: Started in 1950 ms

1 Ответ

1 голос
/ 12 сентября 2012

Может случиться так, что, поскольку вы запускаете контейнер сервлетов в Spring (а не наоборот), он не может найти ServletContext.

У вас есть два варианта:

  1. Попробуйте запустить Jetty с программной загрузкой, которая загружает Spring в контексте сервлета ( Развертывание сервлета программно с Jetty )
  2. Разделите ваш applicationContext.xml на два определения контейнера: те, которые необходимы для запуска Jetty, и те, которые не могут быть запущены без действительного ServletContext.Те, которые нуждаются в корректном контексте сервлета, вероятно, должны быть в initParams для класса bean-компонента «ServletContextHandler», в то время как в настоящее время у вас один и тот же applicationContext.xml, определенный дважды.
...