2015-10-14 15 views
5

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.

+0

Sono abbastanza sicuro che gli aggiornamenti mi abbiano eseguito 2.6.1 (ma non 2.6.2) quando li ho provati in Feb-2016. –

+0

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! –

+1

Certo, gli aggiornamenti in Eclipse non sono gli stessi della versione che Glassfish potrebbe utilizzare. –

risposta

1

Il problema è stato risolto aggiornando la versione di eclipselink utilizzata da Glassfish. Eclipse ha aggiornato la sua versione, ma Glassfish necessita del suo aggiornamento. L'elenco dei file jar che devono essere inseriti nella directory glassfish/modules viene fornito in questa risposta: How to change EclipseLink in GlashFish 4.0?

2

Passando attraverso il sito Web di collegamento JIRA ed eclipse, sembra che il collegamento 2.6.1 di Eclipse sia ancora in fase di sviluppo e non sia ancora stato rilasciato.Ecco perché non è disponibile per il download.

Per utilizzare una versione aggiornata di Jersey in Maven è necessario fornire in base alla versione più recente 2.19 nel pom.xml.

Tuttavia, poiché il collegamento 2.6.1 di eclipse deve ancora essere rilasciato, anche se si utilizza la versione più recente di Jersey potrebbe essere di scarsa utilità. Ma comunque puoi provarlo.

+0

Ho aggiornato la versione della maglia, ma questo non fa alcuna differenza. Quando esce la nuova versione di eclipselink, come posso aggiornarlo? Eclipse lo fa automaticamente? –

+0

Dubito che l'aggiornamento automatico sia lì. Puoi controllare gli aggiornamenti da "marketplace" all'interno di Eclipse usando questo link http://download.eclipse.org/rt/eclipselink/updates/. Attualmente la sua versione 2.6.0 è la più recente. –

2

Per aggiornare la versione di jersey, trovare il seguente dipendenza e aggiornare il valore del tag versione nel file pom.xml

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

Quale server stai distribuendo il tuo progetto in? Ho avuto MOLTI problemi con Glassfish 4.1.1 (incluso quell'errore). Ho eseguito il downgrade a 4.1 e tutto funziona correttamente. Potrebbe essere dovuto a un problema con 4.1.1 nuovi moduli (vasi inclusi nel server). Spero possa essere d'aiuto. Non è la soluzione migliore, ma per me è stata una soluzione temporanea fino a quando non ho trovato i moduli che stanno fallendo.

+0

Ciao Bisonfan95 - Sono abbastanza nuovo per Glassfish - come faccio a declassare la versione - non riesco a trovare nulla online dicendomi come andare su questo ... Tom –

+0

Basta scaricare una distribuzione precedente. Uso netbeans e posso scaricare qualsiasi distribuzione dalla procedura guidata durante l'impostazione del mio progetto. Se Eclipse non ha l'opzione, vai al sito ufficiale di glassfish e cerca una distribuzione più vecchia. Saluti: D – Bisonfan95

+0

Oh e ovviamente configura il progetto in modo che si distribuisca sul nuovo Glassfish precedente che hai scaricato ehn tu Build e eseguilo: D – Bisonfan95

Problemi correlati