Gar*_*gos 14 java gwt serialization rpc gwt-rpc
我有一个RPC服务,使用以下方法:
Run Code Online (Sandbox Code Playgroud)public List<Serializable> myMethod(TransactionCall call) {...}
但是在分析此方法时我收到警告,然后rpc调用失败
Run Code Online (Sandbox Code Playgroud)Analyzing 'my.project.package.myService' for serializable types Analyzing methods: public abstract java.util.List<java.io.Serializable> myMethod(my.project.package.TransactionCall call) Return type: java.util.List<java.io.Serializable> [...] java.io.Serializable Verifying instantiability (!) Checking all subtypes of Object wich qualify for serialization
似乎我不能将Serializable用于我的List ...我可以使用我自己的界面(类似于AsyncDataInterface,它实现了Serializable接口),但事实是我的方法将返回一个列表自定义对象和基本对象(如as Strings,int ....).
所以我的问题是:
Ash*_*bhu 29
在RPC调用中传递对象时,最好在RPC接口中声明具体的参数类型.如果由于某种原因您无法在RPC接口中使用具体类,请尝试尽可能具体.
这是因为GWT编译器在发出javascript时必须考虑编译单元中List的所有可能变体.这包括在类路径中扩展List和Serializable接口的所有类.排列可能很大,这将影响您的编译时间以及应用程序下载大小.
因此,最好的方法是将您的界面定义为
public ArrayList<YourType> myMethod(TransactionCall call) {...}
Run Code Online (Sandbox Code Playgroud)
而不是
public List<Serializable> myMethod(TransactionCall call) {...}
Run Code Online (Sandbox Code Playgroud)
这样编译器只需为ArrayList和YourType扩展生成编译单元.好处是编译时间更短,编译的javascript文件更小,从而加快了应用程序的下载速度.
如果您必须在RPC调用中返回各种不相关的对象,请尝试创建包装类并返回包装类的包装返回值的对象.使用RPC方法定义中的包装类.抵制将包装字段声明为Object或Serializable的冲动,您将否定使用包装器获得的所有序列化优势.相反,您可以为希望通过RPC调用返回的每个具体类型定义一个Wrapper接口和一小组Wrapper实现.
| 归档时间: |
|
| 查看次数: |
9663 次 |
| 最近记录: |