GWT Тип отправки OBJECT через RPC - PullRequest
       18

GWT Тип отправки OBJECT через RPC

1 голос
/ 17 декабря 2010

Я пытаюсь сделать это

Сервисный интерфейс:

Boolean SaveObjectIntoDatabase(Object Entity);

ServiceAsync:

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

и затем реализовать его на сервисеimpl

безуспешно.

Неужели мы не можем отправить переменную типа объекта через 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 

Ответы [ 4 ]

3 голосов
/ 17 декабря 2010

GWT должен знать во время компиляции ВСЕ классы, которые вы отправите через RPC. Он генерирует соответствующие заглушки и т. Д. Для каждого из них.

К сожалению, возможность в общем сказать, что вы отправляете Object, бесполезна, потому что она сгенерирует заглушку для Object (на самом деле это не так, потому что она не сериализуема, но представьте, что это так), но эта заглушка будет бесполезна, например, для String или Date.

Есть способы обойти это. Одним из наиболее распространенных является определение метода RPC API, который никогда не вызывается, а просто перечисляет все типы, которые вы хотите отправить, когда-либо:

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

но ясно, что это ужасный взлом и кошмар обслуживания.

Лучше было бы изменить интерфейс API, чтобы он не использовал Object.

3 голосов
/ 17 декабря 2010

Класс java.lang.Object не является сериализуемым .

2 голосов
/ 21 декабря 2010

делает объект класса сам имплементированным в сериализуемый интерфейс

1 голос
/ 17 декабря 2010

Каждый класс должен быть сериализуемым для отправки на сервер от клиента. Объект не сериализуем, поэтому вы не можете отправить его.

Каждый класс должен реализовывать интерфейс isWerializable GWT, если вы хотите отправить его на сервер. java.io.Serializable - это не то же самое, что GWT isSerializable

...