GWT AutoBean с классом POJO вместо интерфейса

Я надеюсь, что кто-то может предложить простое решение моей проблемы.

У меня есть POJO, скажите:

public class Person
{
    private String name;
    public String getName(){ return name; }
    public void setName(String name){ this.name = name; }
}

Я хотел бы использовать функциональность GWT AutoBean для сериализации/десериализации этого bean в JSON, но AutoBean ожидает интерфейс:

public interface Person
{
    public String getName();
    public void setName(String name);
}

У меня есть настройка AutoBeanFactory:

public interface PersonFactory extends AutoBeanFactory
{
    AutoBean<Person> person();
}

Используя интерфейс factory и Person, я могу десериализовать JSON Person:

PersonFactory personFactory = GWT.create(PersonFactory.class);
AutoBean<Person> autoBeanPerson = AutoBeanCodex.decode(personFactory, Person.class, jsonObject.toString());
Person person = autoBeanPerson.as();

Однако, если я заменю интерфейс Person на класс Person, я получаю исключение AutoBeanFactoryGenerator, которое гласит: "com.xxx.xxx.Person не является интерфейсом".

Как я могу использовать сериализацию/десериализацию AutoBean с помощью моего простого POJO?

Ответы

Ответ 1

Вы просто не можете. AutoBean генерирует легкие, оптимизированные реализации интерфейсов; он явно не может это сделать для классов. Это по дизайну.

Ответ 2

Возможно, если это простое POJO и не имеет свойств других типов автобезопасности:

1) Сделайте PersonPojo implements Person

2) Добавьте метод оболочки к factory:

public interface PersonFactory extends AutoBeanFactory {
    AutoBean<Person> person( Person p ); // wrap existing
}

3) Создайте завернутый AutoBean и сериализуйте с помощью AutoBeanCodex.encode в JSON

PersonPojo myPersonPojo = new PersonPojo("joe");
AutoBean<Person> autoBeanPerson = personFactory.person( myPersonPojo );