我需要一种通过RPC序列化XMLGregorianCalendar的解决方案。
到目前为止,我已经为XMLGregorianCalendar对象编写了一个自定义序列化程序,但是要序列化的对象是Calendar类型的内部Xerxes实现(com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl)。
因此,我的序列化器失败了,因为它没有被使用。
为内部对象编写序列化器不是一个好主意,并且会在eclipse中产生警告,说明该类受到限制(访问限制:由于必需的库C:\ java \ jre \ lib \ rt的限制,无法访问XMLGregorianCalendarImpl类型。罐)。
有没有人设法在客户端成功地将此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的任何扩展吗?
最佳答案
问题不在于RPC序列化。问题是XMLGregorianCalendar
不是emulated,因此不能在客户端使用。通过RPC对其进行序列化将无济于事。
有一个issue to add better javax.time support to GWT,但是模拟这些日期和时间API非常复杂,因此它仍在进行中。
现在,作为一种解决方法,我建议在DTO中使用java.util.Date
,并在服务器端使用映射层将包含XMLGregorianCalendar的“服务器POJO”转换为包含Date的“ GWT DTO”。
此外,在谷歌搜索时,我发现了this class,它是Enunciate库的一部分。对于服务器端的XMLGregorianCalendar 日期映射,它可能很有用。