簡體   English   中英

JBoss和Java 6中帶注釋的WebService中的ClassCastException

[英]ClassCastException in Annotated WebService in JBoss & Java 6

我正在使用JBoss 4.0通過@WebService注釋創建簡單的Web服務,如http://www.jtraining.com/blogs/java-web-services-getting-started.html中所述 但是,當我將服務當作Servlet來訪問時(按照本文中的說明進行操作),我得到了ClassCastException ,它表明我帶注釋的webservice類不能轉換為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>

stacktrace如下:

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)

看起來JBoss 4.0不足以按照嘗試運行Web服務的方式運行Web服務。 開箱即用的JBoss 4.0.5(最新的4.0版本)具有JBossWS的舊實現。 您需要更新的JBossWS版本,該版本可與JDK 1.5及更高版本上的注釋一起使用。

注意:interface和class都在Jboss 5.1.0和4.2.3中工作。 您可能會更容易獲得其他版本的JBoss AS。

我在JBoss AS 6.1上遇到了同樣的問題,我在該服務器上有一個帶有注釋WebServices的應用程序,並且已成功部署,但沒有部署在新的應用程序中。 分析問題后,我意識到我的新WAR應用程序具有一個WEB-INF / lib /目錄,其中包含JBoss已經擁有的一些JAX JAR,但是可能版本不同,因此我刪除了WEB-INF / lib /,重新部署了WebApplication和所有內容工作了。 我認為這可能是ClassLoader問題,或者我用來在NetBeans中開發WebService的JAX版本與JBoss AS 6.1不兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM