2017-06-13 52 views
7

Opracowałem interfejs API języka Jersey, który zwraca kod XML lub JSON (w zależności od nagłówka żądania). Po wdrożeniu na moim serwerze Windows 2012 (Tomcat), nie działa żaden problem.Powracający Json z Jersey na Linuksie zgłasza wyjątek

Kiedy wdrożyć (po kompilacji go na Ubuntu) do Ubuntu w AWS (GlassFish), otrzymuję następujące błędy podczas żądania JSON:

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 

Brak błędów kiedy żądania XML.

Pierwotnie używałem moxy do serializacji JSON, ale potem zacząłem używać Jackson.

Jakieś pomysły, dlaczego działa na jednym serwerze, a nie na innym? Dzięki

+1

Może to być błąd Glassfish. Proszę odnieść się do [tej strony] (https://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json). –

+0

@KoheiTAMURA Tak, widziałem to. Doszedłem do wniosku, że musieli to naprawić. Najwyraźniej nie ... – onefootswill

+0

Co się stanie, jeśli wszystkie zależności związane z Jersey będą traktowane jako "dostarczone"? Pamiętaj, że Tomcat nie ma w nim słoików z Jersey, więc nie ma konfliktu. Ale Glassfish _does_ ma Jersey. Więc twoje słoiki projektu mogą być w konflikcie. Powinieneś więc wykluczyć je z wdrożenia po wdrożeniu do Glassfish i po prostu użyć tych dostarczonych przez Glassfish. –

Odpowiedz

0

W końcu to zadziałało. Najpierw użyj Tomcat, a nie Glassfish.

Następnie dodać nową zależność:

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

ja również ulepszona wersja Jersey do 2,26, ale nie sądzę, że robią różnicę. Wystarczy dodać to do kompletności (tak jak to się stało).

Nie rozumiem powodu, dla którego działa. Zawsze uważałem, że Java działa tak samo w systemach Windows i Linux. Ale hej, jestem po prostu głupim facetem .NET.

Mam nadzieję, że pomoże to innym, którzy znaleźli się w otchłani bezradności w tej kwestii, tak jak ja.