Jersey 客户端在 Tomcat 和 Websphere Liberty Profile 中执行时给出两组结果

Jersey Client giving two sets of results when executed in Tomcat and Websphere Liberty Profile

我已经使用 Jersey 2.15 编写了一个 RESTful 客户端并调用了 IBM Watson 的 RankRetrieve(R&R) 服务。该代码片段在 Eclipse 环境以及 WAR 部署在 Tomcat 7 之外工作,并从 R&R 服务 JSON 获取结果

HttpAuthenticationFeature basicAuthCredentials = HttpAuthenticationFeature.basic(this.userName, this.password);
Client client = ClientBuilder.newClient();
client.register(basicAuthCredentials);
WebTarget webTarget = client.target(this.buildUri())
                            .queryParam("ranker_id", this.rankerID)
                            .queryParam("q", searchTerm)
                            .queryParam("wt", "json");
Invocation.Builder invocationBuilder = webTarget.request(MediaType.TEXT_PLAIN_TYPE)
                                                .accept(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.get();
String resultString = response.readEntity(String.class);
System.out.println("RankRetrieve Response: " + resultString);

但是当在 Websphere LibertyProfile 8.5.5.7 中部署相同的 WAR 文件时,收到的响应是 404。

{"responseHeader":{"status":400,"QTime":0},"error":{"msg":"Bad contentType for search handler :text/xml request={q=theQuestions&ranker_id=SomeRankerID&wt=json}","code":400}}

然后我开始搜索有关 WLP 和 Jersey 的文章,并发现了诸如此类的文章 JAX-RS Jersey Client on Websphere 8.5

同样在调试模式下,当我在Tomcat下观看webTarget时,我看到如下内容:

webTarget : JerseyWebTarget { https://<URL>?ranker_id=someRankerID&q=theQuestions&wt=json }

但是WLP下的同款手表显示如下:

webTarget : org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl@3e59a416

在同一个应用程序中,在其他一些 类 中,Jersey Client 也使用其他服务并且在 WLP 下按预期工作,所以我无法弄清楚只有这段代码是什么原因' 在 WLP 下按预期工作。

这是我的第一个 Java 项目,我尝试搜索 online/reading SO/reading WLP 文档,但 none 帮助我发现了相同代码的原因在 Tomcat 下而不是在 WLP 下获取我的结果。

我无法从我们的服务器中删除 WLP,因为它广泛地包含许多其他应用程序,但对于有关该问题的任何帮助,我将不胜感激。

根本原因是内置的 cxf WebTargetImpl 先被加载,然后是 Jersey 的。

option 1) 关闭jaxrs功能,你可以查看/usr/servers//logs/message.log看看有没有开启jaxrs功能: com.ibm.ws.kernel.feature.internal.FeatureManager A CWWKF0012I:服务器安装了以下功能部件:[....jaxrs-2.0...]

选项 2) 将类加载器策略更改为 parentLast: ..

选项 3) 删除所有 jersey jar 并启用 jaxrs-2.0 功能然后尝试。

尼尔