GWT и java.io.Serializable - PullRequest
       41

GWT и java.io.Serializable

1 голос
/ 29 августа 2009

В моем приложении GWT у меня есть следующий класс модели:

import com.google.gwt.user.client.rpc.IsSerializable;

public class TestEntity implements IsSerializable {
    public String testString;
}

Этот класс реализует пользовательский интерфейс маркера IsSerializable GWT - который мне действительно не нравится, потому что я использую свои классы моделей не только для GWT. Поэтому я предпочитаю java.io.Serializable.

Но если я изменю класс для реализации Serializable вместо IsSerializable, механизм GWT RPC больше не будет работать. Я не получаю ошибку на стороне сервера, но на клиенте AsyncCallback. onFailure вызывается.

Я использую ...

  • GWT 1.7.0.
  • Пружина 2.5.6.SEC01
  • Spring и GWT настроены, как описано здесь .

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Оказывается, что этот гибридный метод Spring-MVC и GWT используется в кодовой базе на моей новой работе - неудивительно, что ошибка, которую я получал, была похожей! Спасибо за это сообщение - это помогло мне определить проблему и исправить ее. Код, который у нас был, основан на старом коде из статьи, которую вы опубликовали - или на том, на чем был основан этот код! Плагиат предостаточно!

Подводя итог, можно сказать, что в этой статье предлагается способ интеграции GWT с Spring-MVC. Суть решения состоит в том, чтобы предоставить класс сервлета Servlet, который объединяет Spring MVC Controller с GWT RemoteServiceServlet. Сериализуемые объекты DTO не поддерживаются, поскольку (я предполагаю) код был основан на коде, предшествующем GWT-1.4, который не мог справиться с DTO, которые не реализовали интерфейс маркера isSerializable в GWT. Обновление класса контроллера очень просто, если вы знаете, что происходит ...

Две фиксированные строки, которые я вижу, просто проходят через SerializationPolicyProvider (который является 'this' в последнем параметре для метода RPC.decodeRequest (). Вызывающий класс расширяет RemoveServiceServlet GWT, который является SerializationPolicyProvider). Я предполагаю, что это простое исправление приводит к вызову обновленного (после 1.4) кода GWT, который может обрабатывать как Serializable, так и isSerializable классы. SerializationPolicyProvider смотрит на сериализацию Policy.

Второе исправление передает serializationPolicy в метод RPC.invokeAndEncodeResponse (). Я предполагаю, что это белый список * .gwt.rpc объектов DTO, которые были проверены при компиляции модуля GWT.

0 голосов
/ 29 августа 2009

Хорошо, я просмотрел комментарии Gwt-Spring-Article (ссылка, которую я разместил) и нашел решение. Мне пришлось изменить две строки в методе вызова процесса:

RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());
0 голосов
/ 29 августа 2009

Какую именно ошибку вы получаете? Мы используем Serializable для наших DTO без каких-либо проблем, поэтому вы тоже можете это сделать.

...