1

根据AutoValue 文档,用@GwtCompatible(serializable = true)注释抽象类并实现可序列化应该足以使生成的值类在 GWT RPC 中可用。然而,对于下面的课程,我收到以下错误:

Caused by: com.google.gwt.user.client.rpc.SerializationException: 
Type 'com.my.package.client.types.AutoValue_PersonLocalData' 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 = PersonLocalData{title=Dr., givenName=Philip, familyName=Mortimer}

我尝试了各种变体(比如只实现常规的 Serializable)但没有成功。上课有什么问题?

import java.io.Serializable;

import com.google.auto.value.AutoValue;
import com.google.common.annotations.GwtCompatible;
import com.google.gwt.user.client.rpc.IsSerializable;

@AutoValue
@GwtCompatible(serializable = true)
public abstract class PersonLocalData
        implements IsSerializable, Serializable {

    public static final long serialVersionUID = 1L;

    public static PersonLocalData create(
            String title,
            String givenName,
            String familyName) {
        return new AutoValue_PersonLocalData(
                title, givenName, familyName);
    }

    public abstract String getTitle();
    public abstract String getGivenName();
    public abstract String getFamilyName();
}

Gradle 文件包括

compile 'com.google.guava:guava:18.0'
compile 'com.google.guava:guava-gwt:18.0'
compile 'com.google.auto.value:auto-value:1.1'

GWT 版本:2.6.0

4

1 回答 1

0

GWT 和注释处理是不舒服的伙伴。关键似乎是将注释处理分离为先决条件步骤。例如,我刚刚通过遵循 Groups 主题BoilerplateGeneration maven configuration 来使用 Maven :在编译步骤中禁用注释处理,而是将其作为 generate-sources 的一部分运行,因此 GWT 可以在运行时将它们视为源文件。过去,我将带注释的类编译成 JAR(包括生成的源代码)并在包含该 JAR 的单独项目上运行 GWT 编译。不幸的是,我没有针对 Gradle 的建议。

于 2015-07-09T15:40:34.723 回答