2012-05-08 1 views
11

C'est la première fois que j'utilise Eclipse et cela me cause beaucoup de problèmes.Services Web de repos renvoyant un 404

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

J'ai créé le nom du projet comme RestExample, et dans que j'ai un paquet de.jay.jersey.first et dans que j'ai un HelloWorldResource de classe, 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 je suis en train d'utiliser boucle comme:

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

Apache Tomcat/6.0.35 - Rapport d'erreur

HTTP Status 404 -/RestExample/rest/Bonjour Type

Statut re Port

un message/RestExample/repos/bonjour

de cription La ressource demandée (/ RestExample/repos/bonjour) est pas disponible.

Apache Tomcat/6.0.35

La question est ce que je devrais changer dans le fichier web.xml afin que je puisse accéder à cette ressource?

J'ai essayé RestExample/de.jay.jersey.first/rest/hello et cela n'a toujours pas fonctionné. TOmcat fonctionne sans erreurs.

+0

Comment avez-vous déployé cette application sur Tomcat? Plus précisément, où se trouve votre fichier web.xml et où se trouve votre fichier de classe? –

+0

J'ai essayé Tomcat 7.0 et ça marche bien – DaTroop

+0

J'ai changé seulement des choses minimes comme la version de Servlet de 2.5 à 3.0 dans web.xml – DaTroop

Répondre

1

Je l'ai essayé avec Tomcat 7.0 et il fonctionne très 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> 

Visionné à http://localhost:8084/RestExample/rest/hello et il fonctionne ok

+0

Cette config est bonne si vous êtes sur Jersey 1.x. Jersey 2.x a un nom de paquet et un nom de propriété différents. Donc, la même configuration ne fonctionnera pas si vous utilisez des bocaux 2.x. Je pensais juste que je vais le mentionner, donc cela évitera des ennuis inutiles pour quelqu'un qui a 2.x jars dans son chemin de classe. – adityalad

-2

comme le aticle dit:

// Get the Todos 
    System.out.println(service.path("rest").path("todos").accept(
      MediaType.TEXT_XML).get(String.class)); 
    // Get XML for application 
    System.out.println(service.path("rest").path("todos").accept(
      MediaType.APPLICATION_JSON).get(String.class)); 
    // Get JSON for application 
    System.out.println(service.path("rest").path("todos").accept(
      MediaType.APPLICATION_XML).get(String.class)); 

vous essayez de spécifier le chemin de la méthode que vous voulez appeler

12

Il m'a fallu beaucoup de temps pour comprendre pourquoi cela ne fonctionnait pas pour moi, malgré la recherche de solutions sur le web. L'erreur que je faisais était que les noms de paquets n'étaient pas à jour avec l'API du nouveau maillot. Voici ce que les noms de package mis à jour devraient ressembler (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. Il ne peut pas être la réponse à cette question particulière, mais pourrait aider quelqu'un. Je l'ai trouvé de here.

+0

merci @ gndps vous avez sauvé ma journée.Votre réponse mérite d'être au top en fait. J'ai changé le projet et j'ai aussi déplacé la partie web.xml mais j'ai oublié de changer le nom de mon paquet. Votre réponse m'a aidé. Merci encore – samir

+0

@samir - ce que gndps signifie n'est pas le nom de votre paquet, mais le nom de param initial où vous fournissez votre nom de paquet dans web.xml. le correctif que vous avez fait est toujours valide pour votre problème, mais légèrement différent du problème expliqué ici. Le nom init-param pour mentionner les paquets diffère avec différentes versions de jersey. –

2

S'il vous plaît ajouter tous les Jars données dans votre projet

Project (clic droit)> Propriétés> Chemin de génération Java> Bibliothèques> Ajouter des fichiers JAR/Ajouter des fichiers JAR externes

  1. asm-3.1.jar
  2. jersey paquet-1.14.jar
  3. jersey client.jar
  4. jersey core.1.17.1.jar
  5. jersey serveur 1.17.jar
  6. jersey servlet-1.17.jar
0

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

cette résolu mon problème:

si vous utilisez un Maven-projet (par exemple avec archétype maven-archetype-webapp) et la HelloWorldResource de classe est mis en œuvre dans le dossier src/main/resources cette classe doesn « t get compilé (par exemple, alors en cours d'exécution "mvn clean package" ou "exécuter sur le serveur" dans Eclipse)

Mettre en œuvre HelloWorldResource dans le dossier src/main/java à la place et pas plus de 404 .. occures (si vous créer un projet Maven avec maven-archetype-webapp le dossier doit être créé manuellement)

1

Vérifiez si votre chemin a ce bar '/' exemple: @Path ('/ path') dans certains cas, ce problème est que la barre manquante!

Questions connexes