Java Jersey-Rest : Keine-provider-Klassen gefunden. (404 Fehler beim Zugriff auf URL)
Edit: ich hatte nicht realisiert, dass alle Anfrage wurden zuerst in den "Apache" und dann umgeleitet wurden auf dem Tomcat. Ich habe eine neue Umleitung in der
apache2.conf
- Datei. Finden Sie die akzeptierte Antwort für details.
Ich habe genau das gleiche problem, wie diese Frage.
Jersey REST Der ResourceConfig-Instanz enthält keine root-Ressource-Klassen
Allerdings muss der Benutzer niemals die Frage beantwortet.
Bin ich Tomcat verwenden, ohne maven. Ich folgte diesem tutorial.
http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/index.html
Ich änderungen vorgenommen web.xml als pro der Artikel
ich.e die neue servlet und servlet-mapping erstellt wurde, mit der korrekten Paket-Namen.
<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>
Habe ich bereitgestellt, die die folgenden jar-Dateien nach tomcat
asm.jar
jersey-server.jar
jersey-core.jar
jsr311.jar
Den tomcat startup log die folgenden Ausnahmen.
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'
Wenn ich auf die URL bekomme ich einen 404.
http://localhost:8080/Jersey/rest/hello
Code:
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";
}
}
Sehe ich keine anderen Ausnahmen in den logs
- Würde es helfen, wenn Sie gepostet web.xml und das Beispiel.Hallo.Ressourcen.HelloResource Klasse als gut.
- code Hinzugefügt, und web.xml
- Diejenigen, die nicht so Aussehen wie Ausnahmen von mir in deinem log, nur informative Meldungen. Das IBM tutorial sagt etwas über das erstellen einer web-app namens Jersey mit Eclipse. Ich bin nicht vertraut mit der Bereitstellung von Tomcat über Eclipse, aber sind Sie sicher, dass der Jersey ist vom richtigen Einsatz Weg? Das heißt, Sie haben versucht, das surfen auf localhost:8080/rest/hello ?
- Der Kontext-Pfad ist ohne es zu ändern, wie das Eclipse-Projekt name. Sie können untersuchen, diese einfach durch drill-down-Projekte-Baum des Sie Tomcat in Ihrem Eclipse-Server-view. Aber es ist möglich, ändern Sie den Kontext-Pfad in Ihrem Projekt-Eigenschaften in der Web-Projekt-Einstellungen Registerkarte. Jedoch sollte der Pfad "localhost:port/[Eclipse project name]/rest/hello
- sollte nicht das @Weg "/rest/hello"? Ich weiß nie, und gerade Karte des Servlets /* 🙂
- Ich glaube nicht, dass die "Keine-provider-Klassen gefunden" ist ein fataler problem, oder bezogen auf die 404 für den eigentlichen API-Anfragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Sie die richtige URL:
Den tomcat-manager-Anwendung ist glücklich, direkt die root-URL des Servlets. (Sie sind vorausgesetzt, dies ist "Trikot" mit der Hauptstadt J.)
http://localhost:8080/manager/html/list
Dann können Sie überspringen die "rest" - Teil durch die URL-Muster in der servlet-mapping der web.xml zu "/*" (ja, es war ein bug in Jersey Bezug auf einmal, aber das ist alte Geschichte)
Dann können Sie append " - Anwendung.wadl", um eine Beschreibung der verfügbaren Ressourcen. Theoretisch:
http://localhost:8080/Jersey/application.wadl
Dieses Problem wurde wie folgt gelöst. Meinem localhost eingerichtet wurde, mit "Apache" webserver leitet alle Anfragen an den Tomcat. Da "Jersey" ist mit einem neuen servlet, musste ich erstellen Sie eine separate Umleitung für diesen servlet-spezifisch.
In Linux
hinzufügen:
Standardmäßig Tomcat verwendet eine war-Datei Namen oder den Namen von dem obersten Verzeichnis des explodierten Krieg als root-Kontext, es sei denn, definiert in catalina_home/conf/server.xml, catalina_home/conf/context.xml oder in Anwendung META-INF/context.xml Datei.
Zugang http://localhost:8080/Jersey/rest/hello, die Kontext-Eintrag sollte
<Context path="/Jersey" docBase="myapp"/>
und Ihre Ressourcen sollten@Path("/rest/hello")
.