La instancia de ResourceConfig no contiene ninguna clase de recurso raíz

79

¿Qué va mal aquí?

The ResourceConfig instance does not contain any root resource classes.
Dec 10, 2010 10:21:24 AM com.sun.jersey.spi.spring.container.servlet.SpringServlet initiate
SEVERE: Exception occurred when intialization
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
        at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:103)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1182)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$600(WebApplicationImpl.java:161)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.java:698)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.java:695)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:197)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:695)
        at com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:117)

Filtrar:

<filter>
    <filter-name>JerseyFilter</filter-name>
    <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class>

    <init-param>
        <param-name>com.sun.jersey.config.feature.Redirect</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
        <param-value>/views/</param-value>
    </init-param>

    <init-param>
        <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
        <param-value>/(images|css|jsp)/.*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>JerseyFilter</filter-name>
    <url-pattern>/myresource/*</url-pattern>
</filter-mapping>

Código:

@Path ("/admin")
public class AdminUiResource {

  @GET
  @Produces ("text/html")
  @Path ("/singup")
  public Viewable getSignUp () {
    return new Viewable("/public/signup", "Test");
  }
}
cmani
fuente
¿Es tu en "/singup"lugar de "/signup"tener algún efecto aquí?
Ken Williams
debe ser un servlet, no un filtro
Emre Türkiş
compruebe si su nombre de paquete y otros parámetros son correctos.
Gaurav

Respuestas:

82

Has intentado agregar

<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>my.package.name</param-value>
</init-param>

a su definición de SpringServlet? Obviamente, reemplace my.package.name con el paquete en el que se encuentra AdminUiResource y asegúrese de que esté en la ruta de clase.

Miguel
fuente
3
Para las personas que no usan Spring: debe agregar esto init-paramal com.sun.jersey.spi.container.servlet.ServletContainerservlet.
zb226
33

Soy nuevo en Jersey. Tuve el mismo problema, pero cuando eliminé la "/" y usé la @path ("admin") funcionó.

@Path("admin")
public class AdminUiResource { ... }
Anver Sadhat
fuente
Estoy usando Spring JAX-RS, Jersey. Esta solución está funcionando bien para mí.
Dom
30

DEBE AÑADIR EL NOMBRE DE SU PAQUETE EN

<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>your.package.name</param-value>
</init-param>

TAMBIÉN HE NOTADO UNA COSA SILLY,
Necesito actualizar mi proyecto después de MAVEN BUILD, de lo contrario, me mostrará el mismo error.
Por favor comente si sabe la razón por la que necesitamos actualizar el proyecto.

VdeX
fuente
2
¡Tú Molas! ¡Funcionó correctamente cuando actualizo mi proyecto después de la instalación de Maven! Gracias. :)
Mahan
2
@Tmp gracias, eso es realmente extraño. Después de actualizar, funciona bien. Más uno para ti hackear
Arun
28

Esto significa que no pudo encontrar ninguna clase que se pueda ejecutar como servicio web RESTful de jersey.

Cheque:

  • Si 'com.sun.jersey.config.property.packages " falta en su web.xml.
  • Si valor para 'com.sun.jersey.config.property.packages ' param falta o no es válido (el paquete mencionado no existe). Debería ser un paquete donde haya colocado sus clases POJO que se ejecutan como servicios de jersey.
  • Si existe al menos una clase POJO, que tiene un método anotado con @Pathatributo.
Pawan
fuente
Por alguna razón, tenía esta propiedad llamada jersey.config.server.provider.packages y funcionaba con Glassfish. Después de cambiar el nombre, también funciona en Jetty.
Ulises
3
Un par de líneas en mi archivo de configuración hacían referencia a un directorio vacío, lo que estaba causando este error. <servlet> <servlet-name>Jersey Web Services</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <!-- <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> -------><param-value>package.without.any.webservices</param-value> </init-param> --> <load-on-startup>1</load-on-startup> </servlet>
Nielsvh
12

Su paquete de recursos debe contener al menos un POJO que o bien está anotado con @Patho tienen al menos un método anotado con @Patho una solicitud de método designador, tales como @GET, @PUT, @POST, o @DELETE. Los métodos de recursos son métodos de una clase de recursos anotados con un designador de método de solicitud. Esto resolvió mi problema ...

hakish
fuente
11

Me encontré con este problema con JBOSS EAP 6.1. Pude implementar mi código a través de eclipse en el servidor JBOSS, pero una vez que intenté implementar el archivo como un archivo WAR en JBOSS, comencé a recibir este error.

La solución fue configurar web.xml para que funcione correctamente con JBOSS al permitir que los dos trabajen juntos.

Las siguientes dos líneas se comentaron en web.xml para permitir que JBOSS haga sus propias configuraciones

<!--  
    <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.your.package</param-value>
</init-param> -->

Y luego agregue los siguientes parámetros de contexto después

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
Antman06
fuente
3
Esta sugerencia me funcionó en Wildfly 8.1. Sin <context-param/>embargo, no tuve que agregar la sección. Solo tenía que quitar la <param-name>com.sun.jersey.config.property.packages</param-name> <init-param/>sección.
Donovan Muller
3
Lo mismo para mi. Solo comentando / eliminando el <init-param>solucionado este problema en Wildly 8.2.0; sin embargo, tuve otros problemas, como que la aplicación que estaba implementando no se ejecutaba con Jersey en Wildly. Jersey (utilizado por GlassFish) y RestEasy (utilizado por Wildfly) tienen configuraciones diferentes.
lantrix
2
Estuve luchando durante varias horas. ¡Esto realmente me ayudó!
blaa
10

Básicamente lo corrigí como a continuación y todo funcionó bien.

<servlet>
    <servlet-name >MyWebApplication</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.feature.Redirect</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
        <param-value>/views/</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
        <param-value>/(images|css|jsp)/.*</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>MyWebApplication</servlet-name>
    <url-pattern>/myapp/*</url-pattern>
</servlet-mapping>
cmani
fuente
9

Recibo esta excepción debido a que falta un ResourseConfig en Web.xml.

Añadir:

<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>/* Name of Package where your service class exists */</param-value>
</init-param>

Clase de servicio significa: clase que contiene servicios como: @Path("/orders")

TechSunil
fuente
7

Tuve el mismo problema al intentar ejecutar la aplicación web desde un proyecto de eclipse. Tan pronto como copié los archivos .class /WEB-INF/classes, funcionó perfectamente.

Rodrigo Asensio
fuente
sí ... tienes razón ... Debido a algún error en mi código java, los archivos de clases no se generan correctamente. Por lo tanto, se produjo el error anterior para mí. Se corrigieron esos errores de Java, se limpió el código y se generaron archivos de nueva clase. Después de la generación del archivo de clase, el error anterior se solucionó para mí. Gracias Rodrigo Asensio ..
¿Entonces tienes que configurarlo para que los archivos .class compilados vayan allí? Es extraño que el eclipse o algo no lo haga automáticamente
Dukeatcoding
6

Tuve el mismo problema, probé un montón de ejemplos diferentes y probé todas las soluciones posibles. Lo que finalmente hizo que funcionara para mí fue cuando agregué un @Path("")over the class line, lo dejé fuera.

Holstadius
fuente
5

Tuve el mismo problema y descubrí que era un problema con la forma en que implementé mi código fuente. Como dice el mensaje de error:"...does not contain any root resource classes" . Por lo tanto, no pudo encontrar ninguna clase de recursos en el paquete configurado. Simplemente implementé mal las clases, por eso no las recogió.

Olvidé implementar mis archivos de clase en el directorio / WEB-INF / classes del WAR; inicialmente lo tenía directamente en la raíz del archivo WAR. Entonces, cuando buscó clases de recursos, no las encontró, porque existían en una ubicación diferente (incorrecta).

NS du Toit
fuente
4

Mismo problema - web.xml se veía así:

<servlet>
    <servlet-name>JerseyServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.mystuff.web.JerseyApplication</param-value>
    </init-param>
...

Proporcionar una aplicación personalizada anula cualquier detección automática de clases configurada en XML. Necesita implementar los métodos correctos para escribir su propio código para conectar las clases. Vea los javadocs.

Dustin Getz
fuente
3

Otra posible causa de este error es que se olvidó de agregar las bibliotecas que ya están en la /WEBINF/libcarpeta a la ruta de compilación (por ejemplo, al importar un .wararchivo y no verificar las bibliotecas cuando se le solicita en el asistente). Me acaba de pasar.

bmurauer
fuente
3

Me sucedió cuando implementé mi main.jar, sin marcar la casilla de agregar entradas de directorio en el menú de exportar jar en Eclipse .

serj
fuente
2

Bueno, es un poco tarde para responder. Me he enfrentado al mismo problema y mis búsquedas en Google fueron en vano. Sin embargo, logré encontrar cuál era el problema. Puede haber muchas razones para obtener este error, pero recibí el error debido a lo siguiente y quería compartirlo con mis compañeros desarrolladores.

  1. Anteriormente usé Jersey 1.3 y recibía este error. Pero cuando actualicé los frascos a la última versión de Jersey, este problema se resolvió.
  2. Otra instancia en la que obtuve este error fue cuando intentaba implementar mi servicio en JBoss construyendo un archivo war. Cometí el error de incluir los archivos de Java en .war en lugar de las clases de Java.
Nikhil
fuente
2

Tuve que agregar una barra diagonal al final de @path

@Path ("/admin/") 
MobileMon
fuente
2

Ok ... Para mí funciona bien simplemente asignando la "clase de servlet" a com.sum.jersey.spi.container.servlet.ServletContainer, estoy usando IDE (Eclipse Mars)

<servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/frontend/*</url-pattern>
    </servlet-mapping>

pero por alguna razón tuve que reiniciar mi computadora para poder trabajar en mi localhost. ¿Si todavía no funciona? Tienes que agregar en tu web.xml este código entre la etiqueta "servlet".

<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>the.package.name</param-value>
</init-param>

"the.package.name" es el nombre del paquete donde tienes tus clases. Si está utilizando IDE, actualice el proyecto y vuelva a ejecutarlo en Tomcat. todavía no funciona? reinicia tu computadora y funcionará.

usuario3945851
fuente
2

Otra cosa para verificar es una combinación de entradas anteriores.

Puede tener en su archivo web.xml esto:

<init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.acme.rest</param-value>
</init-param>

y puedes tener

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>

pero no puede tener ambos o obtendrá este tipo de error. La solución en este caso sería comentar uno u otro (probablemente el primer fragmento de código estaría comentado)

demongolem
fuente
1

sí, agregando el parámetro init para com.sun.jersey.config.property.packages solucionó este problema para mí.

estaba fusionando un servicio de descanso de jersey en una aplicación de primavera basada en maven y obtuve este error.

Harinath
fuente
1

También recibí este tipo de error, ocúpese de las configuraciones en xml.

escribí com.sun.jersey.comfig.property.packages

En vez de com.sun.jersey.config.property.packages

Después de la corrección, está funcionando.

Ravi Thapa
fuente
1

ese problema se debe a que jersey no puede encontrar un paquete de dependencia para su servicio de descanso declarado

verifique la distribución del paquete de su proyecto y afirme que es igual a su valor de parámetro web.xml

Jose luis garcia
fuente
1

Probablemente sea demasiado tarde, pero así es como resolví este error.

Si esta solución no funciona,

<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>/* Name of Package where your service class exists */</param-value>
</init-param>

En eclipse:

Haga clic con el botón derecho en su proyecto o seleccione Proyecto y presione Alt + Enter En el lado izquierdo de la ventana abierta, busque Java Build Path

Seleccione Bibliotecas en el panel de pestañas de la derecha: si hay algo que está dañado o muestra una marca de cruz en la parte superior de los frascos, elimine y agregue el mismo frasco nuevamente

Aplicar y cerrar

Reconstruye tu proyecto

Sufiyan Ansari
fuente
0

En mi caso, he agregado los frascos dos veces en la ruta de compilación después de importar desde la guerra. Funcionó bien después de eliminar los frascos adicionales que mostraban páginas de error del descriptor de implementación de errores

agregando

<init-param>
          <param-name>com.sun.jersey.config.property.packages</param-name>
          <param-value>service.package.name</param-value>
</init-param>
Hema
fuente
0

También encontré este problema, dos veces por diferentes razones. La primera vez que olvidé incluir

<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>my.package.name</param-value>
</init-param>

como se describe en comentarios anteriores, y una vez que hice eso, comenzó a funcionar.

Sin embargo ... otro día comencé Eclipse, esperando continuar donde lo dejé, y en lugar de tener mi programa funcionando, mostró el mismo error una vez más. Comencé a verificar si accidentalmente había realizado algunos cambios y guardado el archivo dañado, pero no pude encontrar ese error y el archivo se veía exactamente como los ejemplos que tengo, todos en orden. Como funcionó el día anterior, después de una búsqueda inicial, pensé, bueno, tal vez sea un error de Eclipse, Tomcat o algo así, así que intentemos hacer algunos cambios y ver si reacciona. Entonces, hice un espacio + retroceso en el archivo web.xml, solo para engañar a Eclipse que el archivo se cambió, y luego lo guardé. El siguiente paso fue reiniciar el servidor Tomcat (desde Eclipse IDE) y listo, ¡funciona de nuevo!

¿Quizás alguien con una experiencia más amplia podría explicar cuál era realmente el problema detrás de todo esto?

Gishas
fuente
-1

La causa principal de esta excepción es:

No ha proporcionado el nombre correcto del paquete en el que utilizó @Patho olvidó configurar en web.xml / archivo de configuración (nombre del paquete del archivo de clase de la API de descanso, nombre del paquete de su clase)

Compruebe esta configuración en el interior <init-param>

Abhijit Patra
fuente
@jfeferman Esto es claramente un intento de dar una respuesta a la pregunta. Tenga más cuidado al revisar en la cola de LQP.
TylerH