Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为XMLGregorianCalendar编写GWT CustomSerializer?_Java_Gwt_Serialization - Fatal编程技术网

Java 如何为XMLGregorianCalendar编写GWT CustomSerializer?

Java 如何为XMLGregorianCalendar编写GWT CustomSerializer?,java,gwt,serialization,Java,Gwt,Serialization,我需要一个通过RPC序列化XMLGregorianCalendar的解决方案 到目前为止,我为XMLGregorianCalendar对象编写了一个自定义序列化程序,但是要序列化的对象是日历类型的内部Xerxes实现(com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl) 所以我的序列化程序失败得很惨,因为它没有被使用 为内部对象编写序列化程序不是一个好主意,在eclipse中会产生警告,指出类受到限制

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

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

所以我的序列化程序失败得很惨,因为它没有被使用

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

有没有人在客户端成功地将此XMLGC与GWT一起使用? 我是否可以替换gwt.xml中的XMLGC类,并用不同的东西替换它

感谢您的帮助

更新:

我想告诉你目前为止什么不起作用:

  • 添加了一个超级源路径,并用一个更简单的类替换了XMLGC类,该类只包含数据元素

  • 为XMLGC添加了自定义序列化程序类,以将XMLGC从/序列化到轻量级超源类

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

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


是否有人可以确认,这种方法应该是有效的,或者这种方法是因为Impl类而注定要失败的?可能有一个GWT注释/配置,我可以告诉序列化程序接受XMLGC的任何扩展的XMLGC序列化程序?

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

有一种方法,但模拟这些日期和时间API非常复杂,因此仍在进行中

现在,作为一种解决方法,我建议在DTO中使用
java.util.Date
,在服务器端使用映射层将包含XMLGregorianCalendar的“服务器POJO”转换为包含日期的“GWT DTO”


另外,在谷歌搜索的时候,我发现,这是图书馆的一部分。它可能对服务器端的XMLGregorianCalendar日期映射有用。

是的,我知道它不可用。我已经超过了这一步:-)我实际上在寻找一种在客户机上使用公历的方法,用我自己的实现来替换实现。我想,我已经很好地编写了序列化程序,实际上,我可以编译我的代码。但现在,在运行时,XMLGC实际上是另一个对象。我可以建议序列化程序用不同的东西替换该对象吗?正如您所看到的,Xerces包是密封的,因此我无法对这个类进行任何重写。目前,我已经复制到DTO,但复制该层是不必要的。许多人已经尝试在客户端上使用GregorianCalendar/XMLGregorianCalendar/DateTime,并且创建了一些开源项目(例如gwt joda time)以及功能请求()。但是这些项目不再处于活动状态,而且该特性还没有添加到GWT中,因为在GWT中模拟日期-时间代码比看起来更难。这就是为什么我认为在GWT中重新实现GregorianCalendar可能很复杂。您不能用日期替换DTO中的XMLGregorianCalendar吗?这可能与此相关:更改XML层太多了。我将研究推土机实用程序。现在,我们回到“半生成”的委托DTO,它将用字符串包装XMLGC字段。缺点是,我必须为每个包含XMLGC的对象创建一个新对象,不能简单地通过RPC将对象图从XML复制到客户端。由于我们只需要读取客户机上XMLGC内部的值,因此我们希望能够用一个字符串包装器基本上替换客户机代码中的XMLGC。但情况似乎并非如此。我没有回答这个问题,请你回答,谢谢!