Java HttpCookie.parse中的日期无效;行为应该是什么?
今天,我将桌面上使用的java从OracleJDK1.7更改为OpenJDK1.7 所以我从Java HttpCookie.parse中的日期无效;行为应该是什么?,java,datetime,openjdk,specifications,Java,Datetime,Openjdk,Specifications,今天,我将桌面上使用的java从OracleJDK1.7更改为OpenJDK1.7 所以我从 java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) 到 然后我为我的一个项目运行了单元测试,之前成功运行的项目现在失败了。 该测试失败的原因如下: List<HttpC
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
到
然后我为我的一个项目运行了单元测试,之前成功运行的项目现在失败了。
该测试失败的原因如下:
List<HttpCookie> cookies =
HttpCookie.parse("FOO=BAR; expires=Thu, 01-Jan-2020 00:00:10 GMT");
HttpCookie cookie = cookies.get(0);
我发现的问题是,cookie.getMaxAge()突然总是返回一个0,而不是预期的“大”值
结果我问了一个无效的问题:2020年1月1日是星期三,不是星期四。
我在单元测试中修复了这个错误(所以现在我请求“Wed,01-Jan-2020”,现在可以了)
对我来说,问题仍然是:在“输入不太好”的情况下,“应该”是什么行为
我在这里看到的这两种行为都有一些验证
显然:
- Oracle:可以解析日期,因此我们返回值。“一周中的某一天”只是一个“暗示”
- OpenJDK:此日期不能存在,因为它是指定的,所以我们返回一个0
Wdy, DD-Mon-YYYY HH:MM:SS GMT
这是基于RFC 822、RFC 850、RFC 1036和RFC 1123,唯一的法定时区是GMT,日期元素之间的分隔符必须是破折号
发件人:
5.2。语义学
如果包含,则星期几必须是日期规范中暗示的日期
因此,您的字符串不是一个集合cookie字符串
在以下情况下,解析方法应引发IllegalArgumentException:
标头字符串违反cookie规范的语法,或者cookie名称包含非法字符,或者cookie名称是cookie协议保留使用的令牌之一
星期几错误是对规范的语义违反,而不是语法违反,因此不必提出任何异常
总之,没有定义解析方法遇到日期为错误的星期几的行为。规范应该要么强制引发IllegalArgumentException,要么强制忽略问题,因为星期几是可选的冗余信息 “从OracleJDK1.7到OpenJDK1.7”?OpenJDK是Oracle开发的JDK——源代码,我正在将我的更改推到hg.OpenJDK.java.net,我正在为Oracle工作:-)是的,我理解这种混乱。我指的是你可以在这里下载的Oracle版本。这个“正确”的名字是什么?我会称之为OpenJDK。我不会。为了避免进一步的混淆,我添加了这两个版本的版本信息。如果1.7.0_25接受的日期名称与给定日期不符,那么在我看来,1.7.0_25有一个bug,该bug显然已在1.7.0_65中更正。分享和享受。
cookie.getMaxAge();
Wdy, DD-Mon-YYYY HH:MM:SS GMT