2015-07-04 2 views
1

Согласно AutoValue documentation аннотирования абстрактному класса с @GwtCompatible (сериализуемыми = TRUE) и реализацией сериализации должно быть достаточно для класса сгенерированного значения, чтобы можно было использовать в GWT RPC. Тем не менее, с классом ниже я получаю следующее сообщение об ошибке:GWT Сериализация исключение с Автозначением

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} 

Я пробовал различный вариант (например, только осуществление регулярного Сериализуемый) без успеха. Что не так с классом?

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

+0

Вы включили сгенерированные источники (источник для «AutoValue_PersonLocalData') в путь к классам для компилятора GWT? Возможно, вы могли бы показать больше своего 'build.gradle'. –

+0

Я использую плагин GWT для градации, доступный здесь: https://steffenschaefer.github.io/gwt-gradle-plugin/doc/latest/configuration с пристанью и военным плагином. Однако я сомневаюсь, что сгенерированный источник недоступен из GWT, иначе stacktrace не смог бы вызвать toString для объекта после «instance =». –

+2

IIUC, это сообщение отображается на сервере и говорит, что политика сериализации (сгенерированная GWT) не включает класс, поэтому GWT не мог видеть/иметь класс, но сервер делает. –

ответ

0

GWT и обработка аннотаций неудобны Bedfellows. Кажется, что ключ состоит в том, чтобы разделить обработку аннотаций на предварительный шаг. Например, я только что получил эту работу с Maven, следуя разделу «Группы» BoilerplateGeneration maven configuration: отключить обработку аннотаций на этапе компиляции и вместо этого запустить ее как часть источников генерации, поэтому GWT может обрабатывать их как исходные файлы при ее запуске. Раньше я компилировал свои аннотированные классы в JAR (включая сгенерированный исходный код) и запускал компиляцию GWT в отдельном проекте, который включает JAR. К сожалению, у меня нет рекомендаций, предназначенных для Gradle.

Смежные вопросы