使用以下REST服务定义:
@GET
@Path("/selection/{typeAssignation}/{numeroEmploye}")
public Response obtenirChoixSecteurs(@PathParam("typeAssignation") String typeAssignation,
@PathParam("numeroEmploye") Long numeroEmploye,
@QueryParam("confirme") @DefaultValue("true") Boolean confirme)
使用此URL调用服务时:
<...>/selection/HEBDOMADAIRE/206862?confirme=true
Liberty v16.0.0.3抛出NumberFormatException
,客户端收到HTTP 404返回码:
java.lang.NumberFormatException: For input string: "206862?confirme=true"
似乎自由v16.0.0.3无法为正确的PathParams / QueryParams分配正确的值,即使它能够根据URL选择正确的方法
相同的代码在WAS v8.5.5.9中非常有效
这是嵌入Liberty的cxf
中的错误(WAS中的vs wink
)吗?
答案 0 :(得分:3)
我怀疑GET请求以某种方式搞砸了。当我使用您的方法签名构建JAX-RS资源时,一切都按预期工作。我可以重现NumberFormatException的唯一方法是在数字的末尾加上一个非数字字符(例如&#34;&lt; ...&gt; / selection / HEBDOMADAIRE / 206862_?confirme = true&#34;)。这让我觉得你的问号正在逃脱或其他什么。
以下是我使用的代码:
$description_divs = $html->find('.description');
echo 'first div '.$description_divs[0]->plaintext.'<br><br>';
echo 'second div '.$description_divs[1]->plaintext.'<br><br>';
echo 'third div '.$description_divs[2]->plaintext.'<br><br>';
日志(和浏览器)中的输出是:
@GET
@Path("/selection/{typeAssignation}/{numeroEmploye}")
public Response obtenirChoixSecteurs(@PathParam("typeAssignation") String typeAssignation,
@PathParam("numeroEmploye") Long numeroEmploye,
@QueryParam("confirme") @DefaultValue("true") Boolean confirme) {
String s = "obtenirChoixSecteurs typeAssignation='" + typeAssignation + "' numeroEmploye=" + numeroEmploye + " confirme='" + confirme + "'";
System.out.println(s);
return Response.ok("success: " + s).build();
}
我想知道您是否有更多运气使用JAX-RS客户端API来调用服务,例如:
obtenirChoixSecteurs typeAssignation='HEBDOMADAIRE' numeroEmploye=206862 confirme='true'
测试客户端需要使用JAX-RS 2.0 API,但我能够使用Liberty 16.0.0.3获得jaxrs-1.1和jaxrs-2.0功能的成功结果
其他一些想法:
希望这有帮助,Andy
答案 1 :(得分:2)
@Andy,谢谢指针
在WAS v8.5.5中,客户端是这样的:
org.apache.wink.client.Resource resource;
resource = restClient.resource("<...>/selection/HEBDOMADAIRE/206862?confirme=true");
在WLP v16.0.0.3中,客户端被翻译为JAX-RS 2.0,如下所示:
WebTarget webTargetAST = restClient.target(<...>);
WebTarget wt = webTargetAST.path("/selection/HEBDOMADAIRE/206862?confirme=true");
将其更改为以下内容使其正常工作
WebTarget webTargetAST = restClient.target(<...>);
WebTarget wt = webTargetAST.path("/selection/HEBDOMADAIRE/206862");
wt = wt.queryParam("confirme","true");
似乎WLP中的JAX-RS编码"?"
,而WAS v8.5.5中的眨眼则没有,并且它不直接&#34;可见&#34;在日志中...
再次感谢