ClassCastException в аннотированном веб-сервисе в JBoss & Java 6 - PullRequest
1 голос
/ 25 июня 2010

Я использую JBoss 4.0 для создания простого веб-сервиса с использованием аннотации @WebService, как описано в http://www.jtraining.com/blogs/java-web-services-getting-started.html. Однако, когда я обращаюсь к сервису, как к сервлету (согласно инструкциям в этой статье), Я получаю ClassCastException о том, что мой аннотированный класс веб-сервиса не может быть приведен к 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)

Ответы [ 2 ]

1 голос
/ 11 июля 2010

Похоже, JBoss 4.0 недостаточно для запуска веб-сервисов так, как вы пытаетесь их запустить. Из коробки JBoss 4.0.5 (последняя версия 4.0) имеет старую реализацию JBossWS. Вам нужна более новая версия JBossWS, которая будет работать с аннотациями на JDK 1.5 и выше.

Примечание: и интерфейс, и класс работают в Jboss 5.1.0 и в 4.2.3. Возможно, вам будет проще получить еще одну версию JBoss AS.

0 голосов
/ 07 ноября 2011

У меня была такая же проблема с JBoss AS 6.1, у меня есть приложение на этом сервере с аннотированными WebServices и успешно развернуто, но не в новом;анализируя проблему, я понял, что в моем новом WAR-приложении есть каталог WEB-INF / lib / с некоторыми JAR-файлами JAX, которые уже есть у JBoss, но, возможно, в другой версии, поэтому я удалил WEB-INF / lib /, повторно развернул веб-приложение и всеработал.Я думаю, что это может быть проблема ClassLoader или, возможно, версия JAX, которую я использовал для разработки своего WebService в NetBeans, была несовместима с JBoss AS 6.1.

...