java.lang.ClassCastException: org.jersey.webservice.Login cannot be cast to javax.servlet.Servlet
I already done a lot of search and I can't fix this.
I'm bulding a Web Service with Tomcatv7.0, Jersey and Eclipse.
This is the root cause:
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)
...
This is the exception:
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)
...
I have a simple class:
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> ";
}
}
And this is my web.xml:
`<?xml version="1.0" encoding="UTF-8"?>
<display-name>org.jersey.andre</display-name>
<servlet>
<servlet-name>Andre Jersey REST Service</serv开发者_Go百科let-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>`
The Login class is in the package org.jersey.webservice and in WEB-INF/lib I´ve imported the needed jars (jersey-api, jersey-core, etc...).
Do you find anything wrong? I follow the documentation and this isn´t working. Damn!
Thanks in advance.
What tutorial were you reading? This is not the right way to declare a Jersey web service. It is indeed not directly a Servlet
as the exception is trying to tell you. You need to declare the main Jersey servlet container with an init param pointing to the package containing the webservice classes.
<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>
Also note that you should map it on the path /rest/*
not the name /rest
, otherwise you won't be able to use path information like http://example.com/context/rest/foo/bar
and so on.
See also:
- Jersey's own User Guide
- Oracle's JAX-RS with Jersey tutorial (part of Java EE 6 tutorial)
- Vogela's JAX-RS with Jersey tutorial
Unrelated to the concrete problem, consider choosing something else than org.jersey
as main package. E.g. org.andreelias
.
精彩评论