番石榴14.0 GWT系列化可选

番石榴14.0 GWT系列化可选,gwt,deserialization,guava,gwt-rpc,Gwt,Deserialization,Guava,Gwt Rpc,使用Guava 14.0和GWT RPC 2.5.1-rc1,使用maven构建,如中所述 番石榴系列的反序列化似乎效果良好。但是,我在尝试反序列化包含可选.Present的响应DTO时遇到SerializationException Caused by: com.google.gwt.user.client.rpc.SerializationException: com.google.common.base.Present/3434853995 at com.google.gwt.use

使用Guava 14.0和GWT RPC 2.5.1-rc1,使用maven构建,如中所述

番石榴系列的反序列化似乎效果良好。但是,我在尝试反序列化包含可选.Present的响应DTO时遇到SerializationException

Caused by: com.google.gwt.user.client.rpc.SerializationException: com.google.common.base.Present/3434853995
at    com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
查看SerializerBase.java:146 methodToJava映射不包含:

com.google.common.base.Present/3434853995
但是,它确实包含一个CustomFieldSerializer,用于:

com.google.common.base.Present/3491224270
那么,/3434853995映射是怎么回事

这似乎是SerializerBase用来确保服务器端类型与客户端类型相同的哈希(在编译时计算)。
查看番石榴gwt和服务器端番石榴可选。目前,它们不匹配。而且由于现在是在服务器端实例化的,所以它的散列与客户端的存在不匹配?

Hmm。我们的内部测试可以成功地对创建的服务器进行GWT序列化
可选
,但这不是我们的公共番石榴版本第一次未能匹配我们的内部GWT行为

从您提供的链接来看,听起来您已经完成了我建议的前两件事:确保您的客户端和服务器端库都依赖于
guavagwt
,并在gwt模块中声明对
com.google.common.base.base
的依赖

我现在的另一个想法是问你的DTO是什么样子的。GWT有时难以确定需要准备序列化哪些类。实际上,我怀疑这就是问题所在:GWT显然有一些线索,它可能需要序列化
Present
,而且无论如何,这些问题通常只出现在
final
字段中,这可能会给您带来更根本的困难

你也可以确保你不会以某种方式过渡地使用不同版本的番石榴。如果它是一个真正的Maven可传递依赖项,那么我认为Maven会出错,但是如果您的一个依赖项将Guava类直接绑定到它的jar中,那么Maven可能不会注意到。这似乎也不太可能,但我正在抓救命稻草

如果所有这些都失败了,那么如果您可以组合一个我可以在本地运行的测试用例,我可以进一步调查