2017-06-13 53 views
7

我開發了一個Jersey API,它返回XML或JSON(取決於請求標頭)。部署在我的Windows 2012服務器(Tomcat)上時,它沒有問題。在Linux上從Jersey返回Json拋出異常

當我部署AWS(Glassfish的)到Ubuntu的機器(編譯它在Ubuntu後),我收到以下錯誤,當我要求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 

沒有錯誤,當我請求XML。

我最初使用moxy進行JSON序列化,但後來開始使用Jackson。

任何想法,爲什麼它可以在一臺服務器上工作,而不是另一臺服務器上? 謝謝

+1

可能是Glassfish的一個bug。請參閱[本頁](https://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json)。 –

+0

@KheheiTAMURA是的,我看到了。我想他們現在一定已經修好了。顯然不是... – onefootswill

+0

如果你把所有澤西島相關的依賴項都設置爲「提供」,該怎麼辦?請記住,Tomcat中沒有澤西罐,所以沒有衝突。但Glassfish _does_有澤西島。所以你的項目罐子可能會發生衝突。因此,在部署到Glassfish時,您應該從部署中排除它們,並使用Glassfish提供的部分。 –

回答

0

終於得到了這個工作。首先,使用Tomcat,而不是Glassfish。

然後,添加一個新的依賴:

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

我也升級版本新澤西2.26,但我不認爲那的差異。只是補充完整性(就像它發生的那樣)。

我不明白它的工作原因。我一直認爲Java在Windows和Linux上運行相同。但是,嘿,我只是一個愚蠢的.NET人。

希望這能幫助那些像我一樣在這個問題上陷入無奈之境的人。