Montag, Januar 20, 2020

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.

InformationsquelleAutor kensen john | 2011-07-05

3 Kommentare

  1. 8

    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

  2. 4

    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

    /etc/apache2/apache2.conf

    hinzufügen:

    JkMount /rest/* ajp13_worker
    • Sind Sie sicher, dies war aufgrund der httpd? Schließlich waren Sie Zugriff auf localhost:8080/Jersey/rest/hello das bedeutet, Dass apache2 war nicht umleiten und Sie waren dem Zugriff auf tomcat direkt. Können Sie bitte Antworten, denn ich habe das gleiche 404-Fehler und ich bin nicht mit httpd laufen.
  3. 1

    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").

    • Die @Path-annotation, die Sie dort haben, ist falsch. Der Pfad angegeben Pfad ist relativ zu sowohl der name des servlet-context-und servlet-mapping. Ihre Path-annotation im Grunde Karte, um localhost:8080/Jersey/rest/rest/hello.

Kostenlose Online-Tests