我正在使用JBoss 4.0使用@ http://www.jtraining.com/blogs/java-web-services-getting-started.html中所述的@WebService注释创建一个简单的Web服务。但是,当我点击服务时就好像它是一个servlet(根据本文中的说明),我得到一个ClassCastException
声明我的带注释的web服务类不能转换为javax.servlet.Servlet
。
我哪里错了?
课程如下:
//SimpleServiceWS.java
import javax.jws.WebService;
@WebService()
public interface SimpleServiceWS {
public String simpleMethod();
}
//SimpleServiceImpl.java
import javax.jws.WebService;
@WebService( serviceName="SimpleService", portName="SimpleServicePort", endpointInterface="edu.shyam.ws.SimpleServiceWS")
public class SimpleServiceImpl implements SimpleServiceWS {
public String simpleMethod() {
return "Simple response";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Service</display-name>
<welcome-file-list>
<welcome-file>/SimpleServiceWS</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SimpleServiceWS</servlet-name>
<servlet-class>edu.shyam.ws.SimpleServiceWS</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServiceWS</servlet-name>
<url-pattern>/SimpleService</url-pattern>
</servlet-mapping>
</web-app>
堆栈跟踪如下:
java.lang.ClassCastException: SimpleServiceImpl cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:750)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:1)
看起来JBoss 4.0不足以以您尝试运行它们的方式运行Web服务。开箱即用,JBoss 4.0.5(最新的4.0版本)有一个旧的JBossWS实现。您需要更新版本的JBossWS,它将与JDK 1.5及更高版本的注释一起使用。
注意:接口和类都在Jboss 5.1.0和4.2.3中工作。您可能更容易获得另一个版本的JBoss AS。
答案 1 :(得分:0)
我遇到了与JBoss AS 6.1相同的问题,我在这个服务器上有一个应用程序,带有带注释的Web服务并成功部署,但不是新的;分析问题我意识到我的新WAR应用程序有一个WEB-INF / lib /目录,其中包含一些JBoss已经拥有的JAX JAR,但可能在某些不同的版本中,所以我删除了WEB-INF / lib /,重新部署了WebApplication和所有内容工作。我认为这可能是一个ClassLoader问题,或者我在NetBeans中用于开发WebService的JAX版本与JBoss AS 6.1不兼容。