web-dev-qa-db-fra.com

Reste les services Web retournant un 404

C'est la première fois que j'utilise Eclipse et cela me fait beaucoup rager. 

J'ai installé Tomcat 6.0, téléchargé les bibliothèques Jersey et suivi les didacticiels de: http://www.vogella.com/articles/REST/article.html#first_client

J'ai créé le nom du projet en tant que RestExample, et à l'intérieur de celui-ci, j'ai un paquet de.jay.jersey.first et à l'intérieur de celui-ci, j'ai une classe HelloWorldResource, et voici à quoi il ressemble:

package de.jay.jersey.first;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloWorldResource {
// 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> ";
}
}

et mon web.xml ressemble à 

<?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" xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>RestExample</display-name>
  <servlet>
<servlet-name>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>de.jay.jersey.first</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>
</web-app>

Et j'essaie d'utiliser curl comme:

curl http: // localhost: 8081/RestExample/rest/hello

Apache Tomcat/6.0.35 - Rapport d'erreur 

Statut HTTP 404 -/RestExample/rest/Hello

type Rapport de situation

message / RestExample/reste/bonjour

la description La ressource demandée (/ RestExample/rest/hello) est Non disponible.

La question est: que dois-je changer dans le fichier web.xml pour pouvoir accéder à cette ressource?

J'ai essayé RestExample/de.jay.jersey.first/reste/bonjour, et cela n'a toujours pas fonctionné. Tomcat s'exécute sans erreur.

11
roymustang86

Je l'ai essayé avec Tomcat 7.0 et cela fonctionne bien:

package de.jay.jersey.first;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloWorldResource {
// 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> ";
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>RestExample</display-name>
    <servlet>
        <servlet-name>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>de.jay.jersey.first</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>
</web-app>

Visité à http: // localhost: 8084/RestExample/rest/hello et ça marche ok

1
DaTroop

Il m'a fallu beaucoup de temps pour comprendre pourquoi cela ne fonctionnait pas pour moi alors que je cherchais une solution sur le Web. L'erreur que je commettais était que les noms de paquets n'étaient pas à jour par rapport à la nouvelle jersey api. Voici à quoi devraient ressembler les noms de paquetages mis à jour (Web.xml):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>RestExample</display-name>
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>de.jay.jersey.first</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>
</web-app>

Notez que <servlet-class> et <param-name> sont différents (mis à jour) de vogella tutorial . Ce n'est peut-être pas la réponse à cette question particulière mais pourrait aider quelqu'un. Je l'ai trouvé dans ici .

13
gndps

S'il vous plaît ajouter tous les bocaux donnés dans votre projet

Projet (clic droit)> Propriétés> Chemin de construction Java> Bibliothèques> Ajouter des fichiers JAR/Ajouter des fichiers JAR externes 

  1. asm-3.1.jar
  2. jersey-bundle-1.14.jar
  3. jersey-client.jar
  4. jersey-core.1.17.1.jar
  5. serveur-maillot-1.17.jar
  6. jersey-servlet-1.17.jar
2
saurabh

Vérifiez si votre chemin a cette barre '/' Exemple: @ Chemin ('/ chemin') Dans certains cas, ce problème n'est que la barre manquante!

1
jhonatan2760

j'ai cherché pendant des heures une solution au même problème.

cela a résolu mon problème:

si vous utilisez un projet Maven (par exemple, avec archetype, maven-archetype-webapp) et que la classe HelloWorldResource est implémentée dans le dossier src/main/resources cette classe n'est pas compilée (par exemple, puis vous exécutez "mvn paquet propre "ou" exécuté sur le serveur "dans Eclipse)

Implémentez HelloWorldResource dans le dossier src/main/Java à la place et il ne restera plus de 404 .. (Si vous créez Maven-Project avec maven-archetype-webapp, le dossier doit être créé manuellement)

1
Celle

Si vous utilisez plutôt ServletAdaptor, un utilisateur de Jersey 2.XX. Comme ça, 

    <servlet-class>com.Sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
    <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> -->
0
whiz