如何为XMLGregorianCalendar编写GWT CustomSerializer?

时间:2014-11-07 14:21:17

标签: java gwt serialization

我需要一个通过RPC序列化XMLGregorianCalendar的解决方案。

到目前为止,我为XMLGregorianCalendar对象编写了一个自定义序列化程序,但要序列化的对象是Calendar类型的内部Xerxes实现(com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl)。

所以我的序列化程序因为没有使用而惨遭失败。

为内部对象编写序列化程序不是一个好主意,并在eclipse中产生警告,该类受到限制(访问限制:由于对所需库C:\ java \ jre \ lib的限制,XMLGregorianCalendarImpl类型无法访问\ rt.jar中)。

有没有人设法在客户端成功使用这个XMLGC和GWT? 我可以替换gwt.xml中的XMLGC类,并用不同的东西替换它吗?

任何帮助表示赞赏!

更新:

想告诉你到目前为止没有用的东西:

  • 添加了Supersource路径,并将XMLGC类替换为更简单的类,仅包含数据元素。

  • 为XMLGC添加了一个自定义序列化程序类,用于从/向轻量级上载源类序列化XMLGC。

  • 该方法在运行时失败,因为运输的对象不是XMLGC,而是com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl,它位于密封包中rt.jar中。

  • 重复XMLGCImpl相同步骤的方法对我来说失败了,可能是因为我太愚蠢了,可能是因为密封的软件包阻碍了这个过程。

有人可以证实,这种方法应该起作用,还是由于Impl类而导致注定的方法?也许有一个GWT注释/配置,我可以告诉序列化器接受XMLGC的任何扩展的XMLGC序列化器?

1 个答案:

答案 0 :(得分:1)

问题不在于RPC序列化。问题是XMLGregorianCalendar不是emulated,因此无法在客户端使用。通过RPC序列化它不会有帮助。

有一个issue to add better javax.time support to GWT,但要模仿这些日期和版本非常复杂。时间API,所以它仍在进行中。

目前,作为一种解决方法,我建议您在DTO中使用java.util.Date,并在服务器端使用映射层来翻译您的服务器POJO"包含XMLGregorianCalendar到" GWT DTO"包含日期。

此外,在谷歌搜索时,我找到了this class,它是Enunciate库的一部分。它可能对XMLGregorianCalendar< - >有用。服务器端的日期映射。