Utilizzo Eclipse Luna (versioni 4.4.2) e Glassfish 4 per creare un'app Web REST utilizzando JAX-RS.Classe non trovata quando si utilizza JAX-RS con Eclipse e Glassfish
il seguente pezzo di codice, che è solo un semplice post per l'API REST che è stato precedentemente lavorando bene, ha iniziato lanciare un molto strano errore:
@POST
public Response addToWatchlist(WatchlistEntry watchlistentry)
{
return Response.ok(watchlist_service.addToWatchlist(watchlistentry).toString()).build();
}
L'errore è qui sotto:
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
Tutto quello che ho potuto scoprire questo è il sito: https://java.net/jira/browse/JERSEY-2888
Uno dei commenti dice questo è stato corretto in EclipseLink 2.6.1 e Jersey 2.19.
Sono abbastanza nuovo nell'usare MAVEN ed eclipse - supponendo che quanto sopra sia corretto, come posso ottenere il mio Progetto Maven in Eclipse per aggiornare la versione di Jersey? Inoltre come aggiorno la versione di EclipseLink? Il loro sito sembra avere solo la versione 2.6.0 disponibile: http://www.eclipse.org/eclipselink/#download
Suppongo che tutto questo possa essere fatto attraverso l'eclissi stessa?
Tutti apprezzati!
EDIT 1: Sembra EclipseLink 2.6.1 è stato rilasciato su 15 OTTOBRE 2015, come si può vedere qui: http://www.eclipse.org/eclipselink/releases/
Tuttavia, come si può vedere qui, non sembra avere stato incorporato in eclissi per "help -> aggiornamento software": http://download.eclipse.org/rt/eclipselink/updates/
Che è altamente fastidioso.
Sto costruendo il mio sito web REST e nessun PUT o POST funzionerà a causa di questo errore.
Qualcuno sa come far funzionare 2.6.1? Sto usando un progetto Maven jersey-quickstart-webapp.
Questo bug è un dolore reale in faccia.
EDIT 2: Oggi ho un attacco. Quando controllo programmtically quale versione di EclipseLink viene utilizzata in fase di esecuzione come qui di seguito, mi dice che è la versione 2.6.1, anche se il bug rimane:
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 una questione connessa (How to find what version of EclipseLink my Eclipse Project is using?) ho scoperto come per trovare i file jar reali che Glassfish sta usando per Eclipse. Sono nella directory glassfish/modules. All'interno del file org.eclipse.persistence.core.jar è presente un file readme.html che indica la versione di eclipselink utilizzata da glassfish. Per me era 2.6.
Ho aggiornato manualmente org.eclipse.persistence.core.jar e il file org.eclipse.persistence.moxy.jar con le ultime versioni dal sito di maven. Anche se questo è abbastanza hacky, poiché non so cos'altro viene fatto facendo ciò, si risolve questo problema. Se scopro il modo corretto per farlo, scriverò una risposta qui sotto, per tutti quanti.
Sono abbastanza sicuro che gli aggiornamenti mi abbiano eseguito 2.6.1 (ma non 2.6.2) quando li ho provati in Feb-2016. –
Sì, quando provo a vedere usando il codice nel mio progetto per vedere quale versione di eclipselink sta usando, dice 2.6.1. Ma quando controllo l'effettivo org.eclipse.persistence.core.jar nella directory glassfish/modules il file readme.html dice 2.6. E ho ancora l'errore che si verifica! –
Certo, gli aggiornamenti in Eclipse non sono gli stessi della versione che Glassfish potrebbe utilizzare. –