在 Linux 从 Jersey 返回 Json 抛出异常

Returning Json From Jersey on Linux Throws Exception

我开发了一件球衣 API,其中 returns XML 或 JSON(取决于请求 header)。当部署在我的 Windows 2012 服务器 (Tomcat) 上时,它没有问题。

当我部署(在 Ubuntu 上编译后)到 AWS (Glassfish) 中的 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。

知道为什么它可以在一台服务器上运行而不能在另一台服务器上运行吗? 谢谢

终于成功了。首先,使用 Tomcat,而不是 Glassfish。

然后,添加一个新的依赖:

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

我还将 Jersey 版本升级到 2.26,但我认为这没有什么不同。只是为了完整性而添加它(因为它确实发生了)。

我不明白它起作用的原因。我一直认为 Java 运行 在 Windows 和 Linux 上是一样的。但是,嘿,我只是一个愚蠢的 .NET 人。

希望这能帮助那些和我一样在这个问题上陷入无助的人。