1

我在使用 jersey 1.18.6 的 google app-engine 上部署了 java 中的 RESTful Web 服务应用程序。我想使用邮戳 java 客户端从它发送交易电子邮件。当我集成它时,我看到了以下异常:

javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family

据我所知,我认为这个错误是因为使用了两个不同(可能不兼容)的球衣版本,1.18.6 用于 jersey-server、jersey-guice 和 jersey-bundle,2.25.1 用于 jersey-客户(按邮戳)。

然后我尝试将球衣版本 1.18,6 贯穿始终,因此在我的主项目 pom 中,在包括邮戳的依赖项的同时,我排除了 jersey-client (通过添加排除标头)并在我的 main 中单独添加了 jersey-client 依赖项项目 。

但后来我收到以下错误:

java.lang.NoClassDefFoundError: javax/ws/rs/core/MultivaluedHashMap

这是我认为 MultivaluedHashMap 类仅存在于 jax-rs 2.x 版本中(与 jersey 2.x 版本兼容)

所以我的问题是:

  1. 是否有使用 jersey 1.x 而不是 jersey 2.x 的邮戳 java 客户端库版本?

  2. 如果没有,那么除了将我的主要项目从 jersey 1.x 迁移到 jersey 2.x 之外,我还有什么选择。我不想这样做,因为我们不仅要迁移 jersey 依赖项,而且我认为还有一些其他的东西,比如 guice、shiro 等,这将非常耗时。此外,仅仅为了包含一个附加模块而修改多个现有依赖项似乎并不是最佳选择。

4

3 回答 3

1

没有。该项目的 pom.xml 的第一次提交已经使用 Jersey 2.25.1

于 2018-06-12T05:37:10.193 回答
0

正如Mureinik上面提到的,当我们在图书馆工作时,我们在 Postmark 的计划是使用更新的图书馆版本,因为从长远来看它们是更好的选择。

在我们的Github 页面上,Rupert 提出了很好的建议,从中我发现单独的 ClassLoader 是一个不错的选择。在接下来的几天里,我将在兼容性方面对库代码进行一些尝试,但是我们总是支持在我们的代码库中使用更新的库。

于 2018-06-14T09:47:44.857 回答
0

请查看我对 Github 问题页面的最新评论,了解使用旧泽西岛版本的可能解决方案https://github.com/wildbit/postmark-java/issues/11

通过仅移植您身边的 HttpClient 类,将库移植到 Jersey 1.x 应该很容易。

于 2018-06-14T15:07:30.513 回答