2012-07-13 138 views
6

我试图将基于Jax-WS的Web服务迁移到JBoss 7,但应用程序(部署为war)在启动时失败以启动监听器。错误listenerStart - JaxWS - JBoss as 7

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需要什么依赖关系?)

回答

7

使用JBoss AS7(Java EE6)时,实际上不需要将WSServlet作为servlet类放入web.xml中。而是你必须有使用@WebService

注解类的类名

所有你想要做的就是确保在您的JBoss配置(例如standalone.xml),你必须扩展Web服务启用:

<extensions> 
    [...] 
    <extension module="org.jboss.as.webservices"/> 
</extensions>