GWT конвертировать RPC в JSON - PullRequest
4 голосов
/ 01 февраля 2012

Мое приложение использует GWT-RPC для связи с сервером. Есть ли способ прозрачно сериализировать мои данные с помощью JSON без изменения уровня RPC?

ИМХО, это может быть достигнуто путем изменения сериализаторов и использования кодекса autobean в пользовательском интерфейсе.

Зачем мне это нужно?

  • Я хочу сделать междоменные вызовы RPC
  • Я хочу вызывать серверную часть из не GWT-приложения без предоставления дополнительного слоя на серверной стороне.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

ОБНОВЛЕНИЕ Я только что наткнулся на http://code.google.com/p/gerrit/source/browse/README?repo=gwtjsonrpc, который активно поддерживается (поскольку он является частью Gerrit, инструмента проверки кода, используемого командой Android)

Естьпосмотрите на http://code.google.com/p/gwt-rpc-plus/, но он больше не поддерживается ...

Если вам это действительно нужно и вы не хотите уходить от GWT-RPC, тогда замена сериализаторов GWT должна быть возможной: это точночто делает reRPC (com.google.gwt.rpc) стандарт GWT-RPC (com.google.gwt.user.rpc), но для этого нужно сделать немного больше (а именно: сгенерировать код сериализации для клиентской стороны, так как во время выполнения нет отражения).

1 голос
/ 01 февраля 2012

Это будет трудной задачей.Я не думаю, что смена сериализаторов будет работать, сериализаторы GWT-RPC работают с вводом как с потоком (в основном данные, отправляемые с сервера, на самом деле в формате JSON, но они могут быть проанализированы только GWT-RPC).Вам придется создать совершенно новый генератор, который будет создавать код для разбора и сериализации / десериализации объекта.AutoBean Framework может быть очень полезен в этом случае.В конце вы сможете перейти от сериализации GWT-RPC к какому-либо другому протоколу без фактического изменения текущего кода, который использует сервисы GWT-RPC.

Самая большая проблема - междоменный обмен сообщениями.Обычно вы используете JSONP, но проблема в том, что JSONP в основном разрешает только GET-запросы. Если вам нужно отправить много данных на другой сервер, вы не сможете уместить все в один запрос.Вы можете решить эту проблему с междоменным обменом документами (например, вы откроете iframe, который загрузит специальный коммуникационный javascript с удаленного сервера, и вы будете использовать этот iframe в качестве прокси для вашей службы через postMessage), но эта функция не поддерживаетсяв IE7.

...