Что означает эта ошибка сериализации и как я могу ее предотвратить? - PullRequest
0 голосов
/ 28 июля 2011

Я кодирую в GWT 2.3, используя Eclipse. Хотя у меня был опыт программирования, он был ограничен клиентской стороной. Мой текущий проект включает создание картографической программы, которая берет список точек из листа Excel и размещает их на предварительно определенном изображении. Теперь у меня подключен мой сервлет и клиентский код, и у меня уже есть представление о том, как читать файл Excel.

Моя текущая проблема: Я получаю следующую ошибку при загрузке приложения в Firefox в режиме разработки:

Что-то отличное от int было возвращено методом JSNI '@com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader::readInt()': значение JS типа undefined, ожидаемое int

Консоль режима разработки не выдаёт мне ошибок при запуске, те, что говорят, что есть [ПРЕДУПРЕЖДЕНИЕ] с двумя вещами, которые я не использую (изображения, которые я назвал неправильно, но не загружаю никогда).

В настоящее время мой код выглядит следующим образом:

В моем Floor.java коде на стороне клиента:

 MyServiceAsync service = (MyServiceAsync) GWT.create(MyService.class);
    AsyncCallback<String> callback = new AsyncCallback<String>() {
        public void onFailure(Throwable caught) {
            printerModel.setText("FAILED");
            String details = caught.getMessage();
            printerModel.setText(details);
        }
        @Override
        public void onSuccess(String result) {
            //I purposefully have this as an empty method so I could figure out the error

        }
    };

    service.readFile("PrinterList.xls", callback);

По моему MyService.java:

>public String readFile(String s);

In `MyServiceImpl.java`:

>public String readFile(String s) {

        // TODO Auto-generated method stub
        try {
           } catch (Exception e) {
        }
        return "foo";
    }

Мой AsyncCallback тип String, что, похоже, вызывает ошибку. Метод, который вызывает мой клиентский код, в этот момент возвращает одну строку «fubar» (для простоты). Я думал, что строки были автоматически сериализуемые , но я не уверен. Итак, как я могу получить эту ошибку, чтобы уйти? А как мне сделать сериализованный код сервера?

1 Ответ

1 голос
/ 29 июля 2011

Что исключение говорит в основном это:

Клиент пытался прочитать объект из потока данных. Основываясь на сигнатуре вызываемого метода (или некоторой другой подсказке), потоковый читатель ожидал int, но вместо этого нашел undefined.

Что касается сериализуемости String, ваше предположение верно. Они сериализуемы без каких-либо усилий с вашей стороны.

Не глядя на код и / или трассировку исключений, трудно сказать что-либо еще.


EDIT:

Твой код мне подходит. Есть ли шанс, что вы смешиваете версии GWT? То есть вы скомпилировали свое приложение GWT с 2.3, но путь к классу сервера содержит более старый файл GWT (или наоборот). Взгляните на:

  1. Настройки версии GWT проекта. Проект-> Свойства -> Google -> Веб-инструментарий. Какая версия GWT там выбрана?
  2. Сравните настройки GWT с Проектом -> Свойства -> Путь сборки Java -> Библиотеки. Сколько GWT связанных банок вы видите там? Какая версия? Есть ли более одного gwt-servlet-x.y.jar?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...