Java Jersey客户端在Tomcat和Websphere Liberty概要文件中执行时提供两组结果

Java Jersey客户端在Tomcat和Websphere Liberty概要文件中执行时提供两组结果,java,tomcat7,jersey-2.0,websphere-liberty,jersey-client,Java,Tomcat7,Jersey 2.0,Websphere Liberty,Jersey Client,我已经使用Jersey 2.15编写了一个RESTful客户端,并调用IBMWatson的RankRetrieve(R&R)服务。该代码片段适用于Eclipse环境以及Tomcat7中部署的WAR,并从R&R服务获取结果JSON HttpAuthenticationFeature basicAuthCredentials = HttpAuthenticationFeature.basic(this.userName, this.password); Client client = ClientB

我已经使用Jersey 2.15编写了一个RESTful客户端,并调用IBMWatson的RankRetrieve(R&R)服务。该代码片段适用于Eclipse环境以及Tomcat7中部署的WAR,并从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);
但是当相同的WAR文件部署在Websphere LibertyProfile 8.5.5.7中时,收到的响应是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,发现了以下文章:

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

webTarget : JerseyWebTarget { https://<URL>?ranker_id=someRankerID&q=theQuestions&wt=json }
在同一个应用程序中,在其他一些类中,Jersey客户端也使用其他服务,并在WLP下按预期工作,因此我无法找出仅此代码在WLP下未按预期工作的原因

这是我的第一个Java项目,我尝试过在线搜索/阅读SO/阅读WLP文档,但没有一个帮助我发现相同代码在Tomcat下而不是WLP下获取结果的原因


我不能从我们的服务器上删除WLP,因为它广泛地包含许多其他应用程序,但任何关于这个问题的帮助都是非常感谢的

根本原因是先加载了内置cxf WebTargetImpl,然后才加载了Jersey

选项1)禁用功能jaxrs,您可以检查/usr/servers//logs/message.log以查看是否启用了任何jaxrs功能: com.ibm.ws.kernel.feature.internal.FeatureManager A CWWKF0012I:服务器安装了以下功能:[……jaxrs-2.0……]

选项2)将classloader策略更改为parentLast: ..

选项3)删除所有jersey JAR并启用jaxrs-2.0功能,然后重试


Neal

既然您提供了自己的impl,您是否尝试过在liberty中禁用jaxrs功能?它可以通过eclipse添加,也可以通过webPorfile或ee7特性隐式添加。检查server.xml我一直在查看WLP文档,但无法找出示例,因为我的server.xml文件不包含文档中描述的内容。
webTarget : org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl@3e59a416