2016-11-09 21 views
0

我想了解我的远程过程调用的有效负载中的数据字段。 Date和Timestamp类型对象最让我困惑。从GWT RPC有效载荷中去除序列化日期和时间戳以进行调试

完整请求有效载荷的样子:

7 | 0 | 8 | https://myapp.com/myapp/client/|72119BCB4CE5FB8D147EA76E8006F76E|com.myapp.service.MyService|updateTimepoint|java.lang.String/2004016611|java.util.Date/3385151746|554455|java.sql.Timestamp/3040052672|1|2|3|4|2|5|6|7|8|VhGcuow|0|

该服务的接口,因为它是在代码中定义是:

public void updateTimepoint(String myId, Date timepoint, 
        AsyncCallback<Void> async); 

从上述值的数组,我会告诉粗体份(见下文)是指发送java.util.Date对象和中间的“554455” - 是myId(我知道来自用例)。我没有解释为什么myId变量放在中间:

java.util.Date/3385151746 | 554455 | java.sql.Timestamp/3040052672

现在我正在调试混淆代码,因此查看浏览器中的Source选项卡似乎不是一个选项。这虽然不会有太大的帮助,因为你会看到很奇怪的JS日期引用。我不知道如何阅读。

那么,我如何将有效载荷的Date + Timestamp编译回可读性?

谢谢!

P.S.或者 - 是VhGcuow a Date?根据GWT java.util.Date serialization

+0

如果您建议日期应该被埋入数据中,可能会有所帮助。当ECMAScript历元记录为秒或毫秒时,值3385151746,3040052672和2004016611看起来不是时间值。 – RobG

+0

我期望它是 - 8/11(Nov)/ 2016 16:18:xx。但这是练习的目标 - 检查应用程序发送的Date对象值是否正确,因为我有一些疑问。 – alexp

回答

1

由于@RobG说,这些数字不是值,但有关日期,时间戳类型的详细信息。有效载荷为|分隔,那些/ s是类名字符串的一部分。请参阅Serializing RPC-GWT(今年早些时候我的回答),以获取有关负载中字符串和其他内容顺序的更多详细信息。

VhGcuow很可能是base64编码的long。日期(也可能是时间戳,虽然我没有检查过)被序列化为一个长字段,所以作为long的值将代表自1970年1月1日以来的毫秒数。参见RPC-GWT Serialization/java.util.Date Encoding关于如何理解和解码的更多讨论,而不是简单地相信RPC工作。

请注意,尽管RPC并没有在多年内发生变化,并且正在被成千上万的GWT开发人员使用,但他们并没有在Date正确序列化时遇到问题。更有可能的是其他事情正在进行中(如时区问题) - 提出另一个问题,提供所有问题的详细信息和“正常”测试用例可能会让您更快地得到答案。

+0

谢谢,科林。我会检查链接。我不期望任何序列化低级别问题。这是我的客户端代码抓取错误的Date对象,我只是想检查传递给服务器的内容。 – alexp

+0

再次感谢。我找到了解决我的问题所需的全部信息。 – alexp