2017-06-13 8 views
7

XMLまたはJSON(要求ヘッダーに応じて)を返すJersey APIを開発しました。私の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を要求していないとき。

私はもともとJSONのシリアル化にmoxyを使用していましたが、その後はJacksonを使い始めました。

なぜ1つのサーバで動作するのか、別のサーバで動作しないのでしょうか? ありがとう

+1

Glassfishのバグかもしれません。 [このページ](https://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json)を参照してください。 –

+0

@ KoheiTAMURAうん、私はそれを見た。私は彼らが今それを修正したに違いないと思った。明らかにそうではありません... – onefootswill

+0

ジャージー関連のすべての依存関係を「提供済み」とするとどうなりますか? Tomcatにはジャージージャーが付いていないので、矛盾はありません。しかし、グラスフィッシュはジャージーを持っています。したがって、プロジェクトのjarファイルが競合する可能性があります。したがって、Glassfishにデプロイするときにそれらを配備から除外し、Glassfishが提供するものだけを使用する必要があります。 –

答えて

0

最後にこの作業をしました。まず、Glassfishではなく、Tomcatを使用します。

その後は、新しい依存関係を追加します

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

を私はまた、2.26にジャージーのバージョンをアップグレードしたが、私は違いを作っているとは思いません。完全性のためにそれを追加するだけです(起こったように)。

私はその理由を理解していません。私はいつもJavaがWindowsとLinuxで同じように走っていると思っていました。しかし、ねえ、私はちょうどばか.NETの男です。

これは、私のように、この問題で無力の穴に自分自身を見つけるのに役立ちます。

関連する問題