这里奇怪的一点,让我完全被阻挡了。
我有一个webapp,带有一些JAX-WS注释类。此外,在部署webapp时,使用ThirdPartyContextListener
中的侦听器web.xml
初始化第三方框架。到现在为止还挺好。 (有关信息,框架负责ORM,缓存和数据持久性。)
当我的一些JAX-WS类需要使用框架时,麻烦就开始了。似乎框架尚未及早初始化(通过ThirdPartyContextListener
)。如同,在实例化Web服务类时,似乎尚未调用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>
所以我有几个问题:
不幸的是,我无法真正提供代码示例(来自我的工作场所的安全限制)。
非常感谢!
答案 0 :(得分: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,其中一些与我们起诉的第三方框架相冲突。这很快使我们的解决方案有点太复杂......所以我不再试图变得聪明而只是使用了懒惰的单身人士。
(听起来很糟糕,但它更适合我们,因为每次服务调用都需要调用第三方框架。)