Cookies Apache CXF不使用“处理cookie”;“到期”;指令?

Cookies Apache CXF不使用“处理cookie”;“到期”;指令?,cookies,jersey,cxf,Cookies,Jersey,Cxf,在同一个java项目中,我们使用SUN Jersey客户端来使用一些REST服务,使用Apache CXF来服务一些REST服务。我们使用的一些服务返回设置了“Expires”指令的cookie。对于eg设置Cookie:name=value;Expires=Wed,2021年6月9日10:18:14 GMT 考虑下面的代码,假设wr是一个WebResource。ClientResponse也是一个Jersey类 ClientResponse resp = wr.get(ClientRespon

在同一个java项目中,我们使用SUN Jersey客户端来使用一些REST服务,使用Apache CXF来服务一些REST服务。我们使用的一些服务返回设置了“Expires”指令的cookie。对于eg
设置Cookie:name=value;Expires=Wed,2021年6月9日10:18:14 GMT

考虑下面的代码,假设wr是一个WebResource。ClientResponse也是一个Jersey类

ClientResponse resp = wr.get(ClientResponse.class);
System.out.println(resp.getCookies())
现在,对于带有expires指令的cookie,不会返回实际的cookie。相反,expires指令本身作为cookie返回(cookie的名称是expires,值是日期)

经过一些挖掘,我们发现这是由于CXF解析Set Cookie HTTP头的方式造成的。请参考fromString方法。基本上,代码将在Set Cookie头中找到的最后一对
=
视为Cookie。在这种情况下,
expires=
发生在
name=value
之后(后者是实际需要的cookie)

Jersey的头解析代码(实际的impl类为,它调用前者)返回实际的cookie,忽略expires指令。这种行为对我们来说已经足够好了。所以我们想选择泽西的版本。我们如何做到这一点?请注意,我们还需要项目仍然使用CXF(为服务),因此无法删除依赖关系


所讨论的项目是一个Maven项目。

我在泽西岛和Apache代码中都没有看到对
Expires的特殊处理。奇怪的是,那件球衣的代码对你有用。如何从Jersey cookie中检索过期信息?@dma_k-我们实际上不需要过期信息。我们只需要cookie的名称和值。在Apache代码中,如果您运行fromString方法(假设其参数为字符串“name=value;Expires=Wed,09 Jun 2021 10:18:14 GMT”),您可以看到它只返回字符串中最后出现的名称=值对-因此在本例中,它返回“Expires”作为cookie(name=“Expires”,value=)。Jersey代码OTOH只考虑字符串中的first name=value对,因此正确返回cookie(忽略过期)。我将编辑这个问题,使它更清楚一点。看起来像个bug。从我的角度来看,
Expires
也应该被特别处理(如果类不包含该类的属性,则跳过它?)。。。也许其他人会有好的解决办法。