2010-12-16 7 views
1

Ich versuche, dieseSenden GWT Typ Objekt über RPC

Service Interface zu tun:

Boolean SaveObjectIntoDatabase(Object Entity); 

ServiceAsync:

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

dann es auf dem

ohne serviceimpl Umsetzung Erfolg.

Können wir keine Variable vom Typ Objekt über GWT RPC senden?

Stack-Trace:

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 

Antwort

2

machen Sie die Objektklasse selbst implimenets serialisable Schnittstelle

3

GWT muss zur Kompilierungszeit alle Klassen kennen, die Sie über RPC senden. Es erzeugt geeignete Stubs usw. für jeden von ihnen.

Leider generisch in der Lage, sagen, dass Sie senden Object nicht sinnvoll ist, weil es einen Stub für Object generieren wird (es wird eigentlich nicht, weil es nicht serialisiert, aber vorstellen, dass es der Fall ist), aber das Stub würde unbrauchbar für beispielsweise String oder Date.

Es gibt Möglichkeiten, dies zu umgehen. Einer der häufigsten ist eine RPC-API-Methode zu definieren, die nie nur genannt, dass alle Arten aufgeführt, die Sie senden möchten, überhaupt:

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

aber deutlich ist dies eine schreckliche Hack und eine Wartung Alptraum.

Besser wäre es, die API so neu zu gestalten, dass sie Object nicht verwendet.

1

Jede Klasse sollte serialisierbar sein, damit sie vom Client zum Server gesendet werden kann. Das Objekt ist nicht serialisierbar, deshalb können Sie es nicht senden.

Jede Klasse sollte die GWT isSerializable-Schnittstelle implementieren, wenn Sie sie an den Server senden möchten. java.io.Serializable ist nicht dasselbe wie GWT isSerializable