2011-07-05 19 views
8

Editar: No me había dado cuenta de que todas las solicitudes entraban primero en "Apache" y luego se redireccionaban a Tomcat. Agregué una nueva redirección en el archivo apache2.conf. Vea el accepted answer para más detalles.Resto de Jersey de Java: No se encontraron clases de proveedor. (Error 404 al acceder a la URL)

Tengo el mismo problema que esta pregunta. Jersey REST The ResourceConfig instance does not contain any root resource classes Sin embargo, el usuario nunca respondió la pregunta.

Estoy usando Tomcat, sin maven. Seguí este tutorial. http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/index.html

que realizan cambios en web.xml de acuerdo con el artículo
es decir la nueva correlación de servlet y el servlet se creó con el nombre del paquete correcto.

<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>sample.hello.resources</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> 

He desplegado los siguientes frascos para Tomcat

asm.jar 
jersey-server.jar 
jersey-core.jar 
jsr311.jar 

El registro de inicio de Tomcat tiene las siguientes excepciones.

com.sun.jersey.api.core.PackagesResourceConfig init 
    INFO: Scanning for root resource and provider classes in the packages: 
     sample.hello.resources 

    com.sun.jersey.api.core.ScanningResourceConfig logClasses 
    INFO: Root resource classes found: 
     class sample.hello.resources.HelloResource 

    com.sun.jersey.api.core.ScanningResourceConfig init 
    INFO: No provider classes found. 

    com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
    INFO: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM' 

Cuando tengo acceso a la URL me siento un 404. http://localhost:8080/Jersey/rest/hello

El código:

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 HelloResource { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHello() { 
     return "Hello Jersey"; 
    } 
} 

que aún no hay otras excepciones en los registros de

+0

Sería de gran ayuda si usted envió el web.xml y la clase sample.hello.resources.HelloResource también. – gnuf

+0

@gnuf código agregado y web.xml –

+1

Esas no me parecen excepciones en su registro, solo mensajes informativos. Ese tutorial de IBM dice algo sobre crear una aplicación web llamada Jersey usando Eclipse. No estoy familiarizado con la implementación en Tomcat a través de Eclipse, pero ¿está seguro de que Jersey es la ruta de implementación correcta? Es decir, ¿ha intentado navegar a http: // localhost: 8080/rest/hello? – gnuf

Respuesta

4

Este problema se resolvió de la siguiente manera. Mi servidor local se configuró con el servidor web "Apache" que redirige todas las solicitudes a Tomcat. Como "Jersey" está utilizando un nuevo servlet, tuve que crear un redireccionamiento separado para este servlet específicamente.

En Linux

/etc/apache2/apache2.conf 

complemento:

JkMount /rest/* ajp13_worker 
+1

¿Está seguro de que esto se debió a httpd? Después de todo, usted estaban accediendo a http: // localhost: 8080/Jersey/rest/hello Eso significa que apache2 no estaba redireccionando y que estabas accediendo a tomcat directamente. ¿Puedes responder, ya que estoy teniendo el mismo error 404 y no estoy ejecutando httpd en todas. – Gala101

8

Compruebe que tiene la URL correcta:

El administrador de tomcat la aplicación se complace en dirigirlo a la URL raíz del servlet. (Usted está asumiendo que esto es "Jersey" con el capital J.) http://localhost:8080/manager/html/list

entonces puede saltarse la parte de "descanso" estableciendo el patrón de URL en la correlación de servlet del web.xml para "/ *" (sí , hubo un error en Jersey relacionado con eso una vez, pero eso es historia antigua)

Luego puede agregar "application.wadl" para obtener una descripción de los recursos disponibles. En teoría: http://localhost:8080/Jersey/application.wadl

1

Por defecto, Tomcat utiliza nombre de archivo de la guerra o el nombre del directorio superior de la guerra explotado como contexto raíz menos que se defina en CATALINA_HOME/conf/server.xml, CATALINA_HOME/conf/o en context.xml el archivo META-INF/context.xml de la aplicación. Para acceder a http://localhost:8080/Jersey/rest/hello, la entrada de contexto debe ser <Context path="/Jersey" docBase="myapp"/> y su recurso debe tener @Path("/rest/hello").

+0

La anotación @Path que tiene allí es incorrecta. La ruta especificada por Ruta es en relación con el nombre del contexto del servlet y la asignación del servlet. La anotación de su ruta se correlacionaría esencialmente con http: // localhost: 8080/Jersey/rest/rest/hello. – PeterToTheThird

Cuestiones relacionadas