2017-06-13 1 views
7

Ich habe eine Jersey API entwickelt, die entweder XML oder JSON (abhängig von der Anfrage Header) zurückgibt. Bei der Bereitstellung auf meinem Windows 2012-Server (Tomcat) funktioniert das problemlos.Returning Json aus Jersey auf Linux löst Ausnahme

Wenn ich einsetzen (nachdem es auf Ubuntu kompilieren) zu einem Ubuntu-Rechner in AWS (Glassfish), erhalte ich die folgenden Fehler, wenn ich JSON anfordern:

The server encountered an internal error that prevented it from fulfilling this request. 

exception javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper 

root cause org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper 

root cause java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper 

keine Fehler, wenn ich XML anfordern.

Ich verwendete ursprünglich Moxy für JSON-Serialisierung, aber dann begann mit Jackson.

Irgendwelche Ideen, warum es auf einem Server und nicht einem anderen funktionieren würde? Danke

+1

Könnte ein Fehler von Glassfish sein. Bitte beachten Sie [diese Seite] (https://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json). –

+0

@KoheiTAMURA Ja, ich habe das gesehen. Ich dachte, dass sie es jetzt repariert haben müssen. Anscheinend nicht ... – onefootswill

+0

Was, wenn Sie alle Ihre Jersey bezogenen Abhängigkeiten als "zur Verfügung stellen" setzen? Denken Sie daran, dass Tomcat keine Jersey-Gläser enthält, also gibt es keinen Konflikt. Aber Glassfish _does_ Jersey. So können Ihre Projekteinträge Konflikte verursachen. Daher sollten Sie sie bei der Bereitstellung bei Glassfish aus der Bereitstellung ausschließen und nur die von Glassfish bereitgestellten verwenden. –

Antwort

0

Endlich hat das funktioniert. Verwenden Sie zuerst Tomcat, nicht Glassfish.

Dann fügen Sie eine neue Abhängigkeit:

<dependency> 
    <groupId>org.glassfish.jersey.inject</groupId> 
    <artifactId>jersey-hk2</artifactId> 
</dependency> 

ich auch Jersey Version 2.26 aufgerüstet, aber ich glaube nicht, dass der Unterschied gemacht. Fügen Sie das nur für die Vollständigkeit hinzu (wie es geschehen ist).

Ich verstehe nicht, warum es funktioniert. Ich dachte immer, Java lief unter Windows und Linux gleich. Aber hey, ich bin nur ein dummer .NET-Typ.

Hoffen, dass dies hilft anderen, die sich in einer Grube der Hilflosigkeit zu diesem Thema finden, wie ich es getan habe.

Verwandte Themen