如何使用GWT SerializationStreamFactory

如何使用GWT SerializationStreamFactory,gwt,serialization,smartgwt,gwt-rpc,Gwt,Serialization,Smartgwt,Gwt Rpc,我正在尝试使用SerializationFactory序列化GWT中的对象,但无法使其正常工作。以下是我的POC的示例代码: import com.google.gwt.user.client.rpc.SerializationException; import com.google.gwt.user.client.rpc.SerializationStreamFactory; import com.google.gwt.user.client.rpc.Serializa

我正在尝试使用SerializationFactory序列化GWT中的对象,但无法使其正常工作。以下是我的POC的示例代码:

    import com.google.gwt.user.client.rpc.SerializationException;
    import com.google.gwt.user.client.rpc.SerializationStreamFactory;
    import com.google.gwt.user.client.rpc.SerializationStreamReader;
    import com.google.gwt.user.client.rpc.SerializationStreamWriter;
...........
Some code here....
.........

......

SerializationStreamFactory factory = (SerializationStreamFactory) GWT.create(MyClass.class);
    SerializationStreamWriter writer = factory.createStreamWriter();

    try {
        writer.writeObject(new MyClass("anirudh"));
        String value = writer.toString();


        SerializationStreamReader reader = factory.createStreamReader(value);

        MyClass myObj = (MyClass) reader.readObject();
        System.out.println(myObj.getName());
    } catch (SerializationException e) {
        e.printStackTrace();
    }   
它给了我以下的例外

Caused by: java.lang.RuntimeException: Deferred binding failed for 'com.anirudh..client.MyClass' (did you forget to inherit a required module?)
在我的代码中,我试图序列化其对象的类实现了可序列化

MyClass implements IsSerializable
我不想使用GWT Auto Bean框架,因为它不适合我的用例。另外,我没有使用GWT-RPC框架,现在我非常坚持使用SerializationStreamFactory:D,因为我非常想知道这是如何工作的

任何人都可以分享SerializationStreamFactory的工作示例,或者帮助我指出我所犯的任何错误。 提前谢谢

SerializationStreamFactory工厂=(SerializationStreamFactory)GWT.create(MyClass.class)

你希望这条线做什么?GWT将尝试查找与此类匹配的
replace with
generate with
规则(当类型可赋值时为
,或当类型为
时为
),否则将尝试调用MyClass上的零参数构造函数,有效地
新建MyClass()
。这是你期待的吗

您粘贴的所选异常表明
MyClass
可能不在GWT的编译源路径上,但完整的错误日志将提供更多信息

看起来您似乎试图模拟生成的RPC代码,其中*异步RPC接口将由从
com.google.gwt.user.client.RPC.impl.RemoteServiceProxy
(实现
序列化StreamFactory
)扩展的代码实现。该基本实现进一步扩展,以初始化几个字段,例如
com.google.gwt.user.client.rpc.impl.Serializer
实例,该实例实际上负责序列化和反序列化对象流

序列化程序(默认情况下)是从基类
com.google.gwt.user.client.rpc.impl.SerializerBase
通过重新绑定类
com.google.gwt.user.rebind.rpc.TypeSerializerCreator创建的。如果您已经为
MyClass
构建了自己的生成器,那么您应该启动它以完成
ProxyCreator
应该完成的工作

请记住,在构建您自己的序列化/反序列化机制时,您需要决定哪些类型可以在该系统中进行封送—如果您对所有类型打开它,则需要为源路径上所有可能的对象生成FieldSerializer类型。这将大大扩展编译代码的大小


如果你的主要目标是学习这种“魔法”是如何工作的,那么深入研究
com.google.gwt.user.rebind.rpc
包中的生成器和相关代码。还有其他一些库利用了这些想法,比如gwt大气项目(请参阅开始)。还要查看GWT在构建“传统”RPC接口时创建的生成代码。

感谢您指出GWT序列化程序的工作方式,这将对我有所帮助。