2015-10-14 12 views
5

Ich verwende Eclipse Luna (Versionen 4.4.2) und Glassfish 4, um eine REST-Webanwendung mit JAX-RS zu erstellen.Klasse nicht gefunden, wenn JAX-RS mit Eclipse und Glassfish verwendet wird

Das folgende Stück Code, der nur eine sehr einfache Post an das REST-API ist, die zuvor ganz gut funktioniert, begann einen sehr seltsamen Fehler werfen:

@POST 
public Response addToWatchlist(WatchlistEntry watchlistentry) 
{ 
    return Response.ok(watchlist_service.addToWatchlist(watchlistentry).toString()).build(); 
} 

Der Fehler ist unter:

Warning: StandardWrapperValve[Jersey Web Application]: Servlet.service() for servlet Jersey Web Application threw exception 
java.lang.ClassNotFoundException: javax.xml.parsers.ParserConfigurationException not found by org.eclipse.persistence.moxy 

Alles, was ich in der Lage gewesen, darüber zu erfahren, ist diese Webseite: https://java.net/jira/browse/JERSEY-2888

Einer der Kommentare sagt diese wurde in EclipseLink 2.6.1 und Jersey 2.19 behoben.

Ich bin ziemlich neu in der Verwendung von MAVEN und Eclipse - vorausgesetzt, das obige ist richtig, wie bekomme ich mein Maven-Projekt in Eclipse, um die Jersey-Version zu aktualisieren? Wie aktualisiere ich auch die EclipseLink-Version? Ihre Seite scheint nur die Version 2.6.0 zu haben: http://www.eclipse.org/eclipselink/#download

Ich gehe davon aus, dass all das durch Eclipse selbst gemacht werden kann?

Alle Hilfe geschätzt!

EDIT 1: Es scheint wie Eclipse 2.6.1 wurde am 15. Oktober 2015 veröffentlicht wurde, wie Sie hier sehen können: http://www.eclipse.org/eclipselink/releases/

Doch wie Sie hier sehen können, ist es nicht zu haben scheint in "Eclipse" für "Hilfe -> Update-Software" eingebaut: http://download.eclipse.org/rt/eclipselink/updates/

Das ist sehr ärgerlich.

Ich baue meine REST-Website und kein PUT oder POST funktioniert aufgrund dieses Fehlers.

Kann jemand 2.6.1 arbeiten? Ich benutze ein Maven Jersey-Quickstart-Webapp-Projekt.

Dieser Fehler ist ein königlicher Schmerz im Gesicht.

EDIT 2: Ich habe einen Hack arbeiten heute. Wenn ich programmtically überprüfen, welche Version von Eclipse wird wie unten zur Laufzeit verwendet wird, sagt es mir, es ist Version 2.6.1, auch wenn der Fehler bleibt:

Class<?> myClass = Class.forName("org.eclipse.persistence.Version"); 
Method myMethod = myClass.getMethod("getVersion"); 
String version = myMethod.invoke(null).toString(); 
System.out.println("version = " + version); 

In einer verwandten Frage (How to find what version of EclipseLink my Eclipse Project is using?) Ich fand heraus, wie um die tatsächlichen JAR-Dateien zu finden, die Glassfish für Eclipse verwendet. Sie befinden sich im Verzeichnis glassfish/modules. In der Datei org.eclipse.persistence.core.jar befindet sich eine readme.html, die Ihnen die Version von eclipselink mitteilt, die glassfish verwendet. Für mich war es 2,6.

Ich habe die org.eclipse.persistence.core.jar und die org.eclipse.persistence.moxy.jar Datei mit den neuesten Versionen von der Maven-Site manuell aktualisiert. Während das ziemlich hacky ist, weil ich nicht weiß, was sonst davon betroffen wird, geht es über dieses Problem hinaus. Wenn ich den richtigen Weg finde, um dies zu tun, werde ich unten eine Antwort schreiben, für alle und jeden.

+0

Ich bin ziemlich sicher, dass die Updates mich 2.6.1 (aber nicht 2.6.2) spielen, als ich sie ausprobierte Feb-2016. –

+0

Ja - wenn ich versuche, Code in meinem Projekt zu sehen, um zu sehen, welche Version von Eclipselink es verwendet, heißt es 2.6.1. Aber wenn ich die tatsächliche org.eclipse.persistence.core.jar im glassfish/modules Verzeichnis überprüfe, sagt readme.html 2.6. Und ich habe immer noch den Fehler aufgetreten! –

+1

Sicher, die Updates in Eclipse sind nicht die gleichen wie die Version, die Glassfish verwendet. –

Antwort

1

Das Problem wurde gelöst, indem die Version von Eclipselink, die Glassfish verwendet, aktualisiert wurde. Eclipse hat seine Version aktualisiert, aber Glassfish benötigt ein eigenes Update. Die Liste der JAR-Dateien, die im glassfish/modules-Verzeichnis abgelegt werden müssen, lautet in dieser Antwort: How to change EclipseLink in GlashFish 4.0?

2

Durch die Jersey JIRA und Eclipse Link Website scheint Eclipse Link 2.6.1 noch in Entwicklung, d. H. Noch nicht veröffentlicht.Deshalb ist es nicht zum Herunterladen verfügbar.

Um eine aktualisierte Version von Jersey in Maven zu verwenden, müssen Sie abhängig von der neueren Version 2.19 in Ihrer pom.xml geben.

Aber da Eclipse Link 2.6.1 noch nicht veröffentlicht wurde, kann es auch wenig nützen, wenn Sie eine neuere Version von Jersey verwenden. Aber trotzdem kannst du es versuchen.

+0

Ich habe die Jersey-Version aktualisiert, aber das macht keinen Unterschied. Wenn die neue Version von Eclipselink herauskommt, wie aktualisiere ich sie? Tut Eclipse es automatisch? –

+0

Ich bezweifle, dass automatische Updates da sind. Sie können mithilfe des Links http://download.eclipse.org/rt/ecclipselink/updates/ nach Updates von "Marktplatz" in Eclipse suchen. Momentan zeigt es 2.6.0. –

2

Um Version von Jersey zu aktualisieren, die folgende Abhängigkeit finden und den Wert der Version Tag in Ihrer pom.xml Datei

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>2.22.1</version> 
</dependency> 
2

Welche Server aktualisiert werden Sie in Ihr Projekt bereitstellen? Ich hatte eine Menge Probleme mit Glassfish 4.1.1 (einschließlich dieses Fehlers). Ich habe auf 4.1 heruntergestuft und alles läuft gut. Es kann auf ein Problem mit 4.1.1 neuesten Modulen (Gläser im Server enthalten) zurückzuführen sein. Ich hoffe, es hilft. Es ist nicht die beste Lösung, aber für mich war eine vorübergehende Abhilfe, bis ich finde, welche Module ausfallen.

+0

Hallo Bisonfan95 - Ich bin ziemlich neu bei Glassfish - wie gehe ich über das Downgrade der Version - kann nicht scheinen, etwas online zu finden, sagend mir, wie man das macht ... Tom –

+0

Laden Sie einfach eine ältere Distribution herunter. Ich benutze Netbeans und kann jede Distribution aus dem Assistenten herunterladen, wenn ich mein Projekt einstelle. Wenn Eclipse nicht die Option hat, gehen Sie einfach zur offiziellen Glassfish-Site und suchen Sie nach einer älteren Distribution. Prost: D – Bisonfan95

+0

Oh, und offensichtlich konfigurieren Sie das Projekt so, dass es auf dem neuen älteren Glassfish, den Sie heruntergeladen haben, aufbaut, und Sie es erstellen und ausführen: D – Bisonfan95