我正在尝试这样做
服务接口:
Boolean SaveObjectIntoDatabase(Object Entity);
ServiceAsync:
void SaveObjectIntoDatabase(Object Entity,AsyncCallback <Boolean> Callback);
然后在serviceimpl上实现它
没有成功。
是不是我们不能通过GWT RPC发送一个类型对象的变量?
堆栈跟踪:
onModuleLoad() threw an exception
Exception while loading module com.BiddingSystem.client.BiddingSystem. See Development Mode for details.
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:183) at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510) at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.RuntimeException: Deferred binding failed for 'com.BiddingSystem.client.Service' (did you forget to inherit a required module?) at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53) at com.google.gwt.core.client.GWT.create(GWT.java:97) at com.BiddingSystem.client.BiddingSystem.onModuleLoad(BiddingSystem.java:63) ... 9 more Caused by: com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries) at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:595) at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:455) at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49) ... 11 more
答案 0 :(得分:3)
类java.lang.Object不是serializable。
答案 1 :(得分:3)
GWT需要在编译时知道您将通过RPC发送的所有类。它为每个存根生成适当的存根等。
不幸的是,能够通常说你发送Object
是没有用的,因为它会为Object
生成存根(实际上它不会因为它不可序列化,但想象一下确实如此,但该存根对于String
或Date
无用。
有很多方法可以解决这个问题。其中一个更常见的是定义一个永远不会调用的RPC API方法,它只列出您要发送的所有类型:
public void allTypeIWantToMarshall(Date a, String b, Integer c, Trousers d /* etc */);
但显然这是一场可怕的黑客攻击和维护噩梦。
最好重新设计API,使其不使用Object
。
答案 2 :(得分:2)
使对象类本身实现可序列化的接口
答案 3 :(得分:1)
每个类都应该是可序列化的,以便从客户端发送到服务器。对象不可序列化,这就是您无法发送它的原因。
如果要将其发送到服务器,每个类都应实现GWT isSerializable接口。 java.io.Serializable与GWT isSerializable
不同