java.lang.ClassCastException: org.jersey.webservice.Login не может быть приведен к javax.servlet.Servlet - PullRequest
2 голосов
/ 27 сентября 2011

Я уже провел большой поиск и не могу это исправить.

Я создаю веб-сервис с Tomcatv7.0, Jersey и Eclipse.

Это рутпричина:

java.lang.ClassCastException: org.jersey.webservice.Login cannot be cast to javax.servlet.Servlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) ...

Это исключение:

javax.servlet.ServletException: Class org.jersey.webservice.Login is not a Servlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) ...

У меня есть простой класс:

package org.jersey.webservice;

import ...

@Path("/login")  public class Login {

    // This method is called if HTML is request
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Andre" + "</title>"
                + "<body><h1>" + "Hello Andree" + "</body></h1>" + "</html> ";
    }
}

А это мой web.xml:

`<?xml version="1.0" encoding="UTF-8"?>
  <display-name>org.jersey.andre</display-name>
  <servlet>
    <servlet-name>Andre Jersey REST Service</servlet-name>
    <servlet-class>org.jersey.webservice.Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Andre Jersey REST Service</servlet-name>
    <url-pattern>/rest</url-pattern>
  </servlet-mapping>
</web-app>`

Класс Login находится в пакете org.jersey.webservice и в WEB-INF / lib я импортировал необходимыйjars (jer-api, jer-core и т. д.).

Считаете ли вы что-то не так?Я следую за документацией, и это не работает.Блин!

Заранее спасибо.

1 Ответ

2 голосов
/ 27 сентября 2011

Какой урок вы читали? Это неправильный способ объявить веб-сервис Джерси. Это действительно не Servlet, как исключение пытается вам сказать. Вам необходимо объявить основной контейнер сервлета Jersey с параметром init, указывающим на пакет, содержащий классы веб-сервиса.

<servlet>
    <servlet-name>Andre Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.jersey.webservice</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Andre Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

Также обратите внимание, что вы должны сопоставить его с путем /rest/*, а не с именем /rest, иначе вы не сможете использовать информацию о пути, такую ​​как http://example.com/context/rest/foo/bar и т. Д.

Смотри также:


Не имеет отношения к конкретной проблеме, рассмотрите возможность выбора чего-то другого, кроме org.jersey, в качестве основного пакета. Например. org.andreelias.

...