2017-06-13 26 views
7

Tôi đã phát triển API Jersey trả về XML hoặc JSON (tùy thuộc vào tiêu đề yêu cầu). Khi triển khai trên máy chủ Windows 2012 của tôi (Tomcat), nó hoạt động không có vấn đề gì.Trả lại Json từ Jersey trên Linux ném ngoại lệ

Khi tôi triển khai (sau khi biên dịch nó trên Ubuntu) đến một máy tính Ubuntu trong AWS (Glassfish), tôi nhận được lỗi sau khi tôi yêu cầu 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 

Không có lỗi khi tôi yêu cầu XML.

Ban đầu tôi đã sử dụng moxy để tuần tự hóa JSON, nhưng sau đó bắt đầu sử dụng Jackson.

Bất kỳ ý tưởng nào tại sao nó sẽ hoạt động trên một máy chủ chứ không phải máy chủ khác? Cảm ơn

+1

Có thể là lỗi của Glassfish. Vui lòng tham khảo [trang này] (https://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json). –

+0

@KoheiTAMURA Vâng tôi đã thấy điều đó. Tôi nghĩ rằng họ đã phải sửa nó ngay bây giờ. Rõ ràng là không ... – onefootswill

+0

Nếu bạn đặt tất cả các phụ thuộc liên quan đến Jersey của bạn là "được cung cấp" thì sao? Hãy nhớ rằng Tomcat không có lọ Jersey trong đó, vì vậy không có xung đột. Nhưng Glassfish _does_ có Jersey. Vì vậy, lọ dự án của bạn có thể xung đột. Vì vậy, bạn nên loại trừ chúng khỏi triển khai khi triển khai cho Glassfish, và chỉ sử dụng những cái được cung cấp bởi Glassfish. –

Trả lời

0

Cuối cùng, tính năng này hoạt động. Đầu tiên, sử dụng Tomcat, không phải Glassfish.

Sau đó, thêm một phụ thuộc mới:

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

Tôi cũng nâng cấp phiên bản Jersey đến 2,26, nhưng tôi không nghĩ rằng làm cho sự khác biệt. Chỉ cần thêm rằng để hoàn thành (vì nó đã xảy ra).

Tôi không hiểu lý do hoạt động. Tôi luôn nghĩ Java chạy giống nhau trên Windows và Linux. Nhưng hey, tôi chỉ là một gã câm.

Hy vọng điều này sẽ giúp những người khác thấy mình đang trong tình trạng bất lực về vấn đề này như tôi đã làm.

Các vấn đề liên quan