J'ai lu plusieurs articles mais je n'arrive pas à résoudre mon problème. Vous verrez également des tonnes de messages très similaires à celui-ci, même le même tutoriel. Même en les suivant, je n'arrive pas à trouver la réponse.
Essentiellement, j'essaie de suivre le tutoriel simple à l'adresse: http://www.vogella.com/articles/REST/
J'ai apporté quelques modifications pour le rendre compatible avec Jersey 2.x
J'utilise: Éclipse Tomcat 6 (déployé/exécuté dans Eclipse) jaxrs-ri-2.0 J'ai activé la facette JAX-RS dans Eclipse
Tout se passe bien Tomcat commence bien dans Eclipse Je peux accéder au contenu d'une page statique via:
http://localhost:8080/RestTEST2/index.html
Cependant, lorsque j'essaie d'accéder à mon service via:
http://localhost:8080/RestTEST2/jaxrs/hello
Je reçois un message 404 avec "message introuvable" et "La ressource demandée (non trouvé) n'est pas disponible".
Voici mon web.xml qui se trouve à /WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.Sun.com/xml/ns/javaee" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>TestREST2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>TestREST</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
</web-app>
Voici ma classe Java:
package TestREST;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
// Plain old Java Object it does not extend as class or implements
// an interface
// The class registers its methods for the HTTP GET request using the @GET annotation.
// Using the @Produces annotation, it defines that it can deliver several MIME types,
// text, XML and HTML.
// The browser requests per default the HTML MIME type.
//Sets the path to base URL + /hello
@Path("/hello")
public class Hello {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Jersey" + "</title>"
+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}
}
J'ai également une bibliothèque utilisateur JAX-RS configurée et référencée qui inclut tous les fichiers JAR JAX-RS.
Réflexions sur ce qui ferait que le service Web ne soit pas trouvé?
Jersey 2.0 ne reconnaît pas init-param avec le nom com.Sun.jersey.config.property.packages
(web.xml). Essayez de le remplacer par jersey.config.server.provider.packages
comme décrit dans ServerProperties.PROVIDER_PACKAGES .
Merci beaucoup… je me suis battu pour ça aussi.
Cette combinaison a fonctionné pour moi. Tomcat 7.0.55.
web.xml:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.trgr.cobalt.cmdb.jersey.resource;com.trgr.cobalt.cmdb.jersey.beans;com.trgr.cobalt.cmdb.elasticity</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Je voudrais ajouter une réponse dans ce post.J'ai lutté avec le même problème pendant deux jours et je n'ai pas pu trouver la solution .
org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException
Ce lien répond à la solution si quelqu'un est bloqué comme moi .. org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException
En fait, la première réponse donnée dans cet article suggère la solution qui consiste à jersey 2.x bundle et si vous utilisez jersey 1.x, il continuera à donner des erreurs.
Veuillez vous référer au lien indiqué dans la réponse pour une référence ultérieure.
Simplement en modifiant la configuration d'Apache Tomcat v7.0 lors de la création d'un projet Web dynamique, pour inclure REST, j'ai résolu mon problème. Il n'est pas activé par défaut.
Récemment je me suis retrouvé coincé dans ce problème. Je l'ai résolu en suivant ces deux points comme solution:
src/main/Java
le répertoire source et en conservant la structure du projet comme indiqué ci-dessous:com.Sun.jersey.config.property.packages
par jersey.config.server.provider.packages
dans le web.xml