2010-12-16 2 views
1

나는이GWT는 RPC

서비스 인터페이스를 수행하려고 통해 OBJECT 유형 보내기 성공.

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 

답변

2

객체 클래스 자체를 implemets serialisable 인터페이스로 만듭니다.

3

GWT는 RPC를 통해 보낼 모든 클래스를 컴파일 할 때 알아야합니다. 각각에 대해 적절한 스텁 등을 생성합니다.

불행히도 Object을 전송한다고 일반적으로 말할 수있는 것은 Object에 대한 스텁을 생성하기 때문에 유용하지 않습니다. (실제로는 직렬화 할 수 없기 때문에 실제로는 그렇지 않습니다.하지만 그 스텁은 예를 들어 String 또는 Date과 같이 쓸모가 없어야합니다.

이 문제를 해결할 방법이 있습니다. 보다 일반적인 중 하나는 바로 지금 보내려는 모든 유형을 나열하는 것이라고 결코에 RPC API 방법을 정의하는 것입니다 :

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

을하지만, 분명히이 끔찍한 해킹 및 유지 보수 악몽이다.

Object을 사용하지 않도록 API를 다시 디자인하는 것이 더 좋습니다.

1

모든 클래스는 클라이언트에서 서버로 보내려면 직렬화 가능해야합니다. 객체를 직렬화 할 수 없기 때문에 직렬화 할 수 없습니다.

모든 클래스는 서버로 보내려는 경우 GWT isSerializable 인터페이스를 구현해야합니다. java.io.Serializable은 GWT isSerializable과 동일하지 않습니다.