Object is the super class of EVERY java object, by telling GWT that
you are returning Object, it would force the compiler to generate a
serializer for every serializable object on its classpath! that is
horribly inefficient. you'll want to narrow that type down a bit.
-jason
On Apr 2, 2009, at 8:32 AM, snorbi wrote:
>
> Hello,
>
> We have problems serializing generic Maps in gwt-1.6.2 (both in web
> and hosted mode). It seems that type parameters of generic remote
> service method parameters are not scanned properly when searching for
> potential serializable types.
>
> To reproduce the problem, please see the application snippet below. It
> is a minimal GWT application which calls a remote service from its
> entry method.
> Running the application results in the following exception:
>
> [ERROR] failure
> com.google.gwt.user.client.rpc.SerializationException:
> gwtsandbox.client.Parameter
> at
> gwtsandbox.client.Service_TypeSerializer.raiseSerializationException
> (Service_TypeSerializer.java:69)
> at gwtsandbox.client.Service_TypeSerializer.serialize(Native Method)
> at
> com
> .google
> .gwt.user.client.rpc.impl.ClientSerializationStreamWriter.serialize
> (ClientSerializationStreamWriter.java:216)
> at
> com
> .google
> .gwt
> .user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject
> (AbstractSerializationStreamWriter.java:129)
> at
> com
> .google
> .gwt
> .user
> .client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize
> (Map_CustomFieldSerializerBase.java:50)
> at
> com
> .google
> .gwt
> .user
> .client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize
> (HashMap_CustomFieldSerializer.java:36)
> at gwtsandbox.client.Service_TypeSerializer.serialize(Native Method)
> at
> com
> .google
> .gwt.user.client.rpc.impl.ClientSerializationStreamWriter.serialize
> (ClientSerializationStreamWriter.java:216)
> at
> com
> .google
> .gwt
> .user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject
> (AbstractSerializationStreamWriter.java:129)
> at gwtsandbox.client.Service_Proxy.serviceMethod(Service_Proxy.java:
> 31)
> at gwtsandbox.client.Application.onModuleLoad(Application.java:20)
>
> Uncommenting the lines marked with "// FIX", it works as expected.
>
> I think it is a bug, what do you think?
>
> Thanks for your help!
> Regards:
> Norbi
>
>
> Application.gwt.xml
> -------------------
> <module>
> <inherits name='com.google.gwt.user.User' />
> <entry-point class='gwtsandbox.client.Application' />
> <source path="client" />
> </module>
>
> Application.java
> ----------------
> package gwtsandbox.client;
>
> import java.util.HashMap;
> import java.util.Map;
>
> import com.google.gwt.core.client.EntryPoint;
> import com.google.gwt.core.client.GWT;
> import com.google.gwt.user.client.Window;
> import com.google.gwt.user.client.rpc.AsyncCallback;
> import com.google.gwt.user.client.rpc.ServiceDefTarget;
>
> public class Application implements EntryPoint {
> public void onModuleLoad() {
> Map<String, Object> map = new HashMap<String, Object>();
> map.put("key", new Parameter(5));
>
> ServiceAsync serviceProxy = GWT.create(Service.class);
> ((ServiceDefTarget) serviceProxy).setServiceEntryPoint
> (GWT.getHostPageBaseURL() + "gwt/rpc/"
> + Service.class.getName());
> serviceProxy.serviceMethod(map, new AsyncCallback<Void>() {
> @Override
> public void onFailure(Throwable caught) {
> Window.alert(caught.toString());
> System.out.println(caught);
> }
>
> @Override
> public void onSuccess(Void result) {
> Window.alert("success");
> }
> });
> }
> }
>
> Parameter.java
> --------------
> package gwtsandbox.client;
>
> import java.io.Serializable;
>
> import com.google.gwt.user.client.rpc.IsSerializable;
>
> public class Parameter implements Serializable, IsSerializable {
> private static final long serialVersionUID = 1L;
>
> private int value;
>
> public Parameter() {
> }
>
> public Parameter(int value) {
> setValue(value);
> }
>
> public int getValue() {
> return value;
> }
>
> public void setValue(int value) {
> this.value = value;
> }
> }
>
> Service.java
> ------------
> package gwtsandbox.client;
>
> import java.util.Map;
>
> import com.google.gwt.user.client.rpc.RemoteService;
>
> public interface Service extends RemoteService {
> void serviceMethod(Map<String, Object> map);
>
> // FIX void serviceMethod(Parameter parameter);
> }
>
> ServiceAsync.java
> -----------------
> package gwtsandbox.client;
>
> import java.util.Map;
>
> import com.google.gwt.user.client.rpc.AsyncCallback;
>
> public interface ServiceAsync {
> void serviceMethod(Map<String, Object> map, AsyncCallback<Void>
> callback);
>
> // FIX void serviceMethod(Parameter parameter, AsyncCallback<Void>
> callback);
> }
>
> ServiceServlet.java
> -------------------
> package gwtsandbox.server;
>
> import java.util.Map;
>
> import gwtsandbox.client.Parameter;
> import gwtsandbox.client.Service;
>
> import com.google.gwt.user.server.rpc.RemoteServiceServlet;
>
> public class ServiceServlet extends RemoteServiceServlet implements
> Service {
> private static final long serialVersionUID = 1L;
>
> @Override
> public void serviceMethod(Map<String, Object> map) {
> System.out.println("Service called: " + map);
> }
>
> // FIX @Override
> public void serviceMethod(Parameter parameter) {
> System.out.println("Service called: " + parameter);
> }
> }
>
> web.xml
> -------
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://
> java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
> id="WebApp_ID" version="2.5">
> <display-name>gwt-sandbox</display-name>
> <welcome-file-list>
> <welcome-file>index.html</welcome-file>
> </welcome-file-list>
> <servlet>
> <servlet-name>Service</servlet-name>
> <servlet-class>gwtsandbox.server.ServiceServlet</servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>Service</servlet-name>
> <url-pattern>/gwt/rpc/gwtsandbox.client.Service</url-pattern>
> </servlet-mapping>
> </web-app>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---