7

我正在尝试将基于 Jax-WS 的 Web 服务作为 7 迁移到 JBoss,但应用程序(作为战争部署)无法在启动时启动侦听器。

ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-14) Error listenerStart
ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-14) Context [/abc] startup failed due to previous errors
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-14) MSC000001: Failed to start service jboss.web.deployment.default-host (...)

由于先前的错误,错误消息引用失败,但是日志中没有打印错误。有问题的应用程序像这样捆绑 jax-ws-rt:

    <dependency>
        <groupId>sun-jaxws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.1.7</version>
    </dependency>

如果我更改要提供的 jax-ws-rt 的范围,这会按预期导致一个不错的 ClassNotFound。

WARN  [org.jboss.as.ee] (MSC service thread 1-13) JBAS011006: Not installing optional component com.sun.xml.ws.transport.http.servlet.WSServletContextListener due to exception: java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener (…)

servlet 在 web.xml 中是这样定义的。

<listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
    <description>JAX-WS endpoint for data service</description>
    <display-name>abc</display-name>
    <servlet-name>abc</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>abc</servlet-name>
    <url-pattern>/services/abc</url-pattern>
</servlet-mapping>

我不明白怎么了。我该如何解决这个问题并部署应用程序?

想法:

  1. 我是否缺少依赖项?
  2. 我可以在不进行重大重构的情况下重新配置战争以使用 Jboss 内部 JaxWS 吗?
  3. 如果我不能使用 jboss 内部 JaxWS 版本,我可以强制 Jboss 使用我在战争中捆绑的 Jaxws 版本吗?(如果是这样,我需要 JaxWs 的哪些依赖项?)
4

1 回答 1

8

使用 JBoss AS7 (Java EE6),您实际上不需要将 WSServlet 作为 servlet 类放在 web.xml 中。但是,您将在那里使用 @Webservice 注释的类的类名

您要做的就是确保在您的 JBoss 配置(例如,standalone.xml)中启用了 Web 服务扩展:

<extensions>
   [...]
   <extension module="org.jboss.as.webservices"/>
</extensions>
于 2012-07-13T12:13:17.323 回答