2012-05-08 31 views
11

To jest mój pierwszy raz, kiedy używam Eclipse i bardzo mnie wkurza.Rest Web services zwracające 404

zainstalowałem Tomcat 6.0, pobrane biblioteki Jersey, a ja za tutoriale od: http://www.vogella.com/articles/REST/article.html#first_client

stworzyłem nazwę projektu jako RestExample i wewnątrz, że mam pakiet de.jay.jersey.first i zasięgu że mam HelloWorldResource klasy, a oto jak to wygląda:

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> "; 
} 
} 

i mój web.xml wygląda

<?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> 

i staram się użyć zwijania jak:

zwinięcie http://localhost:8081/RestExample/rest/hello

Apache Tomcat/6.0.35 - wadzie

HTTP status 404 -/RestExample/reszta/Witam

typ Stan re portu

wiadomość/RestExample/reszta/hello

de SCRIPTION żądany zasób (/ RestExample/reszta/hello) jest niedostępny.

Apache Tomcat/6.0.35

Pytanie, co należy zmienić w pliku web.xml, aby uzyskać dostęp do tego zasobu?

Próbowałem RestExample/de.jay.jersey.first/rest/hello, i nadal nie działa. TOmcat działa bez błędów.

+0

W jaki sposób wdrożyłeś tę aplikację na Tomcat? W szczególności, gdzie znajduje się twój plik web.xml i gdzie znajduje się plik twojej klasy? –

+0

Próbowałem Tomcat 7.0 i działa dobrze – DaTroop

+0

Zmieniłem tylko minimalne rzeczy, takie jak wersja serwletu od 2.5 do 3.0 w web.xml – DaTroop

Odpowiedz

1

próbowałem go z Tomcat 7.0 i działa prawidłowo:

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> 

Przeglądany do http://localhost:8084/RestExample/rest/hello i działa ok

+0

Ta konfiguracja jest dobra, jeśli jesteś na wyspie Jersey 1.x. Jersey 2.x ma inną nazwę i nazwę pakietu kontenera. Tak więc ta sama konfiguracja nie działa, jeśli używasz słoików 2.x. Pomyślałem, że o tym wspomnę, więc zaoszczędzę niepotrzebnych kłopotów dla kogoś, kto ma słoiki 2.x w swojej klasie. – adityalad

-2

jakby aticle mówi:

// 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)); 

próbujesz określić ścieżkę metody, którą chcesz wywołać:

12

Zajęło mi dużo czasu, aby dowiedzieć się, dlaczego to nie działa dla mnie, mimo szukania w całym Internecie rozwiązania. Błąd, który popełniłem, polegał na tym, że nazwy paczek nie były aktualne do nowego api aplikacji Jersey. Oto co zaktualizowane nazwy pakietów powinny wyglądać (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> 

Uwaga, <servlet-class> i <param-name> są różne (aktualizacja) z vogella tutorial. To może nie być odpowiedź na to pytanie, ale może pomóc komuś. Znalazłem go od here.

+0

dzięki @gndps zaoszczędziłeś mój dzień. Twoja odpowiedź zasługuje na to, aby być na górze. Zmieniłem projekt i przeniosłem również część web.xml, ale zapomniałem zmienić nazwę pakietu. Twoja odpowiedź mi pomogła. Jeszcze raz dziękuję – samir

+0

@samir - to, co oznacza gndps, nie jest nazwą pakietu, ale nazwą inicjującą param, gdzie podajesz swoją nazwę pakietu w web.xml. nadal poprawka, którą zrobiłeś, jest ważna dla twojego problemu, ale nieco różni się od wyjaśnionego tu problemu. Nazwa init-param do wymieniania pakietów różni się w różnych wersjach koszulki. –

2

proszę dodać wszystkie podane Jars w projekcie

Project (prawy przycisk myszy)> Właściwości> Budowa Java Ścieżka> Biblioteki> Add JAR/ADD słoiki zewnętrznych

  1. ASM-3.1.jar
  2. jersey-bundle-1.14.jar
  3. Jersey client.jar
  4. Jersey core.1.17.1.jar
  5. jersey-server-1.17.jar
  6. jersey-servlet-1.17.jar
0

Szukałem rozwiązania tego samego problemu zbyt wiele godzin.

to rozwiązać mój problem:

jeśli używają Maven-Project (na przykład z archetyp maven-archetyp-webapp) i HelloWorldResource klasa jest realizowane w folderze src/main/resources Klasa nie robi „t uzyskać skompilowany (na przykład wtedy uruchomiony«mvn czyste pakiet»lub«działa na serwerze»w Eclipse)

Wdrożenie HelloWorldResource w folderze src/main/java zamiast i nie więcej 404 occures .. (jeżeli utwórz Maven-Project z maven-archetype-webapp, folder musi być ręcznie utworzony)

1

Sprawdź, czy ścieżka mają ten pasek '/' przykład: @Path ('/ path') w niektórych przypadkach ten problem jest tylko brakuje bar!

Powiązane problemy