【发布时间】:2017-11-14 21:18:55
【问题描述】:
我开发了一个 Jersey API,它返回 XML 或 JSON(取决于请求标头)。当部署在我的 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。
任何想法为什么它可以在一台服务器上运行而不是另一台服务器? 谢谢
【问题讨论】:
-
可能是 Glassfish 的错误。请参考this page。
-
@KoheiTAMURA 是的,我看到了。我想他们现在一定已经修好了。显然不是...
-
如果您将所有与 Jersey 相关的依赖项都设置为“已提供”怎么办?请记住,Tomcat 中没有 Jersey jar,因此没有冲突。但是 Glassfish 确实 有泽西岛。所以你的项目 jar 可能会发生冲突。所以你应该在部署到 Glassfish 时将它们排除在部署之外,而只使用 Glassfish 提供的那些。
-
@peeskillet 我试了一下,并为 moxy 包的依赖项添加了一个范围元素,其值为“提供”。我仍然遇到同样的错误。
-
你能用 glassfish 版本更新问题吗?好像是glassfish bug,见
sentonimohere的评论
标签: java tomcat jersey tomcat8