2013-07-17 17 views
25

Ho letto un numero di post, ma non riesco a risolvere il mio problema. Vedrai anche tonnellate di post molto simili a questo, anche lo stesso tutorial. Anche seguendo loro, non riesco a ottenere la risposta.Jersey REST Web Service, Tomcat, Eclipse e 404's

In sostanza, sto cercando di seguire il semplice tutorial all'indirizzo: http://www.vogella.com/articles/REST/

Ho fatto alcune modifiche per renderlo compatibile con Jersey 2.x

sto usando: Eclipse Tomcat 6 (Implementato/Esegui come all'interno di Eclipse) jaxrs-ri-2.0 ho permesso al JAX-RS Facet in Eclipse

Tutto costruisce bene Tomcat inizia bene all'interno di Eclipse posso arrivare a un contenuto di pagina statica tramite:

http://localhost:8080/RestTEST2/index.html

Tuttavia, quando provo ad accedere al mio servizio via:

http://localhost:8080/RestTEST2/jaxrs/hello

ricevo una 404 con "il messaggio non trovato" e "La risorsa richiesta (non trovata) non è disponibile."

Ecco il mio web.xml che è situato in /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> 

ecco la mia 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> "; 
    } 
} 

Ho anche un JAX- RS User Library configurato e referenziato che include tutti i jar JAX-RS.

Pensieri su cosa potrebbe causare il servizio Web non trovato?

risposta

25

Jersey 2.0 non riconosce init-param con nome com.sun.jersey.config.property.packages (web.xml). Prova a cambiarlo in jersey.config.server.provider.packages come descritto in ServerProperties.PROVIDER_PACKAGES.

+2

impressionante. Ho combattuto per ore. Questo è stato risolto al mio problema. Ho anche avuto il mio nome del pacchetto errato in xml come testREST, quando avrebbe dovuto essere TestREST, ma questa era la radice del problema. Grazie mille. –

+0

Dal tuo commento ho imparato a cambiare il pkg del provider sul mio pkg. Grazie –

+0

Sto cercando di implementare lo stesso progetto ..... ma lo stesso errore persiste .. Ho provato tutte le soluzioni fornite qui e ho provato anche a cambiare la posizione del server tomcat .... – spt025

4

Grazie mille .. ho lottato anche per questo.

Questa combinazione ha funzionato per me: Tomcat 7.0.55 Eclipse Luna Java 1.6 Jersey 1.7

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> 
+0

Sembra che dovrebbe essere un commento, non una risposta. Attendi fino a quando non hai abbastanza rep per commentare invece di commentare nella sezione di risposta. – Chris

0

semplicemente modificando la configurazione di Apache Tomcat v7.0 durante la creazione di Dynamic Web Project, per includere REST, ho risolto il mio problema. Non è abilitato per impostazione predefinita.

+2

Dovresti modificare e aggiungere il codice che ha risolto il tuo problema – Med

3

Vorrei aggiungere una risposta in questo post. Ho avuto problemi con lo stesso problema per due giorni e non sono riuscito a trovare la soluzione. Ho provato tutte le possibili soluzioni fornite qui, ma in seguito ho capito che stava dando assistente errore di

org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException 

Questo collegamento risposte dà la soluzione se qualcuno è bloccato come me .. org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

In realtà la prima risposta fornita in questo post suggerisce la soluzione che è per il bundle jersey 2.x e se si utilizza jersey 1.x allora continuerà a dare errore.

gentilmente di fare riferimento al link indicato nella risposta per ulteriore riferimento

0

Recentemente mi sono trovato bloccato in questo problema. Io ce l'ho risolto seguendo questi due punti come la soluzione:

  1. Rendendo la src/main/java come directory di origine, e mantenendo la struttura del progetto, come illustrato di seguito:

enter image description here

  1. Modifica com.sun.jersey.config.property.packages-jersey.config.server.provider.packages nel web.xml
Problemi correlati