2015-01-29 5 views
1

Немного странное здесь, что полностью заблокировано.Ошибка развертывания для JAX-WS Webapp

У меня есть webapp, с некоторыми аннотированными классами JAX-WS. Кроме того, когда развертывается webapp, инициализируется сторонняя структура, используя прослушиватель ThirdPartyContextListener в web.xml. Все идет нормально. (Для информации, структура отвечает за ORM, кеширование и постоянство данных.)

Проблема возникает, когда некоторые из моих классов JAX-WS должны использовать фреймворк. Кажется, что структура не была инициализирована (через ThirdPartyContextListener) достаточно рано. Как и в случае, похоже, что при создании экземпляров веб-сервисов ThirdPartyContextListener еще не вызывается.

слушатели, безусловно, в правильном порядке, в моем web.xml, так что я ожидаю, что моя ThirdPartyContextListener быть первым кусок кода, чтобы получить казнены:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> 
<web-app> 

    ... stuff here ... 

    <listener> 
     <listener-class>ThirdPartyContextListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>WSServlet</servlet-name> 
     <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>WSServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    ... stuff here also ... 

</web-app> 

Так у меня есть несколько вопросов:

  • Почему классы JAX-WS создаются так рано? (Или, по крайней мере, выглядеть таким образом)
  • Есть ли способ силы структуры, которая будет инициализирован первым

К сожалению, я не могу дать образцы коды (ограничения безопасности от моего рабочего места).

Большое спасибо!

ответ

0

я заметил следующие строки в моем журнале:

Caused by: com.sun.xml.ws.transport.http.servlet.WSServletException: WSSERVLET11: failed to parse runtime descriptor: java.lang.NullPointerException 
    at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:141) 
    at com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer.onStartup(WSServletContainerInitializer.java:65) 

Так что, казалось бы, JAX-WS делает некоторую работу до того, как в listeners попасть; по внешнему виду, он создает делегаты для каждой из конечных точек служб, которые я определил. Я вполне уверен, что вы не можете изменить порядок XxxxContainerInitializer, поэтому я посмотрел на другие альтернативы. Одним из них было использование spring для обслуживания веб-сервисов.

Для этого потребовалось еще несколько JAR, некоторые из которых противоречили сторонней структуре, которую мы подали в суд. Это быстро заставило наше решение немного ... поэтому я перестал стараться быть умным и просто использовал ленивые синглы.

(Звучит ужасно, но это подходит нам лучше, потому что каждый служебный вызов требует вызова сторонней структуры в любом случае.)

Смежные вопросы