有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GWT通过RPC发送类型对象

我正在努力做到这一点

服务接口:

Boolean SaveObjectIntoDatabase(Object Entity);

ServiceAsync:

void SaveObjectIntoDatabase(Object Entity,AsyncCallback <Boolean> Callback);

然后在serviceimpl上实现它

没有成功

是不是我们不能通过GWT RPC发送object类型的变量

堆栈跟踪:

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 

共 (4) 个答案

  1. # 1 楼答案

    GWT需要在编译时知道您将通过RPC发送的所有类。它为每一个生成适当的存根等

    不幸的是,能够一般地说您正在发送Object是没有用的,因为它将为Object生成一个存根(实际上它不会,因为它不可序列化,但想象一下它是可以的),但是该存根对于例如StringDate是没有用的

    这是有办法的。其中一种更常见的方法是定义一个从未调用过的RPC API方法,该方法只列出要发送的所有类型,包括:

    public void allTypeIWantToMarshall(Date a, String b, Integer c, Trousers d /* etc */);
    

    但显然,这是一个可怕的黑客和维护噩梦

    最好是重新设计API,使其不使用Object

  2. # 2 楼答案

    使对象类本身实现可序列化接口

  3. # 4 楼答案

    每个类都应该是可序列化的,以便从客户端发送到服务器。对象不可序列化,因此无法发送它

    如果要将GWT isSerializable接口发送到服务器,则每个类都应该实现该接口。JAVA木卫一。Serializable与GWT isSerializable不同