0

我缺少一些东西:

Serializable Types中明确说明了什么是序列化的:

该类型是可序列化类型的数组(包括其他可序列化数组)。

但是我无法序列化new String[]{"s"}

public void onModuleLoad()
{

    HashMap<String, String[]> p = new HashMap<String, String[]>();
    p.put("xxx", new String[]{"s"});

    ArrayList params = new ArrayList();
    params.add(p);


    greetingService.greetServer(params, new AsyncCallback<String>()
    {

        @Override
        public void onSuccess(String result)
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFailure(Throwable caught)
        {
            caught.printStackTrace();

        }
    });
  }

另一方面,我可以序列化这个:

    ArrayList list = new ArrayList();
    list.add("s");

这是我得到的例外:

com.google.gwt.user.client.rpc.SerializationException
    at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.serialize(SerializerBase.java:125)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamWriter.serialize(ClientSerializationStreamWriter.java:183)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
    at com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize(Map_CustomFieldSerializerBase.java:53)
    at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize(HashMap_CustomFieldSerializer.java:39)
    at com.google.gwt.user.client.rpc.core.java.util.HashMap_FieldSerializer.serial(HashMap_FieldSerializer.java:23)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.serialize(SerializerBase.java:126)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamWriter.serialize(ClientSerializationStreamWriter.java:183)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
    at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:44)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:39)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_FieldSerializer.serial(ArrayList_FieldSerializer.java:23)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.serialize(SerializerBase.java:126)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamWriter.serialize(ClientSerializationStreamWriter.java:183)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
    at com.example.client.GreetingService_Proxy.greetServer(GreetingService_Proxy.java:31)
    at com.example.client.AnotherTest.onModuleLoad(AnotherTest.java:56)
    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:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

这是服务:

  @RemoteServiceRelativePath("greet")
    public interface GreetingService extends RemoteService
    {
        String greetServer(ArrayList name) throws IllegalArgumentException;
    }  
4

2 回答 2

3

尝试使用泛型声明所有可序列化的集合。例如 GreetingService 中的方法应该是:

String greetServer(ArrayList<HashMap<String, String[]>> name) throws IllegalArgumentException;

and also replace all other references to ArrayList with the typed version. GWT uses the generics declaration to validate that the content of collections is serializable and it will often give errors if you don't provide them.

于 2012-09-24T18:19:31.253 回答
1

我在我的 GWT 代码中使用字符串数组来进行客户端和服务器之间的通信。我相信你的问题是你正在尝试序列化 HashMap。

于 2012-09-24T13:38:54.590 回答