GWT-Jackson-APT Не могу угадать имя класса - PullRequest
0 голосов
/ 12 февраля 2019

После того, как остальная часть всего этого работала с образцами, я связался с сериализацией своего фактического базового объекта и обнаружил, что он всегда выдаст ошибку о невозможности угадать класс, который я пытаюсь сериализовать.Это очень упрощенный пример того, что я пытаюсь сделать, наряду с аннотациями, которые, кажется, имеют смысл для меня, как это сделать.

Я хочу сериализовать список <> примитивных (или коробочных примитивов) объектов, в данном случае одну целую и одну строку.Мой настоящий класс - это все примитивные (или в штучной упаковке) типы.

@JSONMapper
public static interface TestMapper extends ObjectMapper<TestElmt>{
    TestMapper INSTANCE = new Webworkers_TestMapperImpl();
}

public static class TestElmt {

    List<test> inerVar = new ArrayList<>();

    public void addElement(test elmt){
        inerVar.add(elmt);
    }
    public List<test> getElements(){
        return inerVar;
    }

}

@JSONMapper
public static class test{

    public static test_MapperImpl MAPPER = new test_MapperImpl();

    int x;
    String y;

    test(int X,String Y){
        x = X;
        y = Y;
    }
}

Но я получаю ошибку:

Ошибка: java: ошибка при создании исходного файла java.lang.IllegalArgumentException: не удалось угадать client.myEnclosingClass.test

1 Ответ

0 голосов
/ 12 февраля 2019

Код в вопросе имеет две проблемы, которые не позволяют его компилировать:

Сначала тестовый класс должен быть назван как Test - заглавная T - вместо test - маленькая t -.

Во-вторых, в тесте класса должен быть конструктор no args, иначе десериализаторы не будут знать, как создать новый экземпляр класса, он будет сгенерирован, но в его методе create будет ошибка компиляции.

если мы изменим тестовый класс, как это все должно работать

@JSONMapper
public static class Test {

    public static Test_MapperImpl MAPPER = new Test_MapperImpl();

    int x;
    String y;

    public Test() {
    }

    Test(int X, String Y){
            x = X;
            y = Y;
    }
}

это потому, что gwt-jackson-apt делает некоторые предположения и использует некоторые соглашения для генерации базовых сериализаторов / десериализаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...