JAX-WS Webapp的部署错误

时间:2015-01-29 12:00:46

标签: tomcat7 jax-ws

这里奇怪的一点,让我完全被阻挡了。

我有一个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>

所以我有几个问题:

  • 为什么JAX-WS类如此早实例化? (或者至少看看这种方式)
  • 有没有办法强制首先初始化框架

不幸的是,我无法真正提供代码示例(来自我的工作场所的安全限制)。

非常感谢!

1 个答案:

答案 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,其中一些与我们起诉的第三方框架相冲突。这很快使我们的解决方案有点复杂......所以我不再试图变得聪明而只是使用了懒惰的单身人士。

(听起来很糟糕,但它更适合我们,因为每次服务调用都需要调用第三方框架。)