java - GWT 和枚举的问题

标签 java gwt enums

我在 GWT 应用程序的客户端部分有一个枚举,当我尝试运行它时出现与序列化问题相关的异常。我做错了什么吗?我读到 GWT 支持枚举,我使用的是最新版本。

枚举:

public enum AnEnum implements Serializable {

    ITEM_A("Item a description"), ITEM_B("Item b description");

    private String description;

    private AnEnum(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

异常:

Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742)
    ... 47 more
Caused by: com.google.gwt.user.client.rpc.SerializationException: Type '(...).client.(...).AnEnum' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = ITEM_A
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
    at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:43)
    at com.google.gwt.user.client.rpc.core.java.util.LinkedList_CustomFieldSerializer.serialize(LinkedList_CustomFieldSerializer.java:36)
    ... 52 more

最佳答案

添加 IsSerializable 接口(interface),一个默认范围内的无参数构造函数,并确保它位于 gwt.xml 文件的源标记中列出的路径之一。 <source path="client">

我真的认为第三个建议是问题所在;我记得以前遇到过这个问题,那是因为我在源路径之外有一个 dto。

你可以有多个源标签。

<source path="common" />
<source path="client" />

一种模式是将持久对象直接放在 com.mysite.common 下,并将通过网络传输的持久对象的混搭放在 com.mysite.common.dto 中,当然客户端 gui 代码在客户端中。

package com.mysite.client;

import java.io.Serializable;

import com.google.gwt.user.client.rpc.IsSerializable;

public enum AnEnum implements Serializable, IsSerializable {

    ITEM_A("Item a description"), ITEM_B("Item b description");

    private String description;

    AnEnum() {
    }

    AnEnum(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

关于java - GWT 和枚举的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4207988/

相关文章:

java - GWT 谷歌地图 : setCenter: not a LatLng or LatLngLiteral: in property lat: not a number

google-apps-script - 如何在 google apps 脚本中使用 DeveloperMetadataVisibility 枚举?

c - 枚举范围

swift - 如果未写入枚举名称,Xcode 不会完成枚举值参数,但会接受它们

java - 遍历链表会引发空指针异常

java - 如何从 Controller 发送多个数组列表到ajax成功函数

GWT - 处理 XSRF/CSRF

java - GWT 按键过滤器

java - Spring SimpleJdbcCall 返回错误值

java - Graphics2D的draw方法在JAVA中如何工作?