Рестлет POSTing JSON в Appengine ошибка - PullRequest
2 голосов
/ 29 октября 2010

У нас есть небольшое приложение с Restlet на сервере GAE и клиентах GWT и Android. Restlet предоставляет GWT-сериализованные ответы клиентам GWT и JSON для клиентов Android.

С GWT-сериализацией все в порядке как локально, так и на производственных серверах AppEngine.

Все в порядке с клиентами Android (JSON), которые общаются с локальным сервером разработки.

Android, работающий с сервером AppEngine, получает JSON-ответы, но POST не работает. Там нет ошибок или предупреждений в журналах. Функция на сервере вызывается, но переданный параметр имеет значение null.

Это код ошибки:

@Post("json")
public void createLocationJSON(Location location) {  // location is always null
    // do something with 'location'
}

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

Просто, чтобы все знали: мне удалось заставить GAE + Restlet + JSON + GWT работать после долгих хлопот. Процесс был действительно хаотичным (напомнил мне о днях программирования для Win32): я просто менял настройки, пока он не начал работать.

Проблема, с которой я столкнулся:

  1. Он обслуживал неправильное представление (JSON, XML, GWT) не тем клиентам. Позже выяснилось, что мне пришлось обратить внимание на порядок методов внутри класса. WTF ??
  2. Я не мог заставить его работать на подпуть, например /остальное/*.

Я не собираюсь использовать Restlet по следующим причинам (подсказка авторам):

  1. Документация скудна, неточна, а иногда и противоречива (по-разному объясняет это в разных частях документации).
  2. Конфигурация не является стандартной JAX-RS. Я знаю, что у них есть возможность настроить его как JAX-RS, но все примеры в документации не основаны на этом.

С тех пор я перешел на Джерси .

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

Вы столкнулись с ограничением GAE, с которым столкнулись несколько пользователей Restlet.

Некоторое время назад GAE прекратил поддерживать прием фрагментированной сущности HTTP. Мы воспроизвели эту проблему и с POST, и с PUT, и с необработанными сервлетами GAE, так что это не связано с рестлетом. Смотрите вопрос GAE: http://code.google.com/p/googleappengine/issues/detail?id=129

Единственный найденный нами обходной путь - не блокировать объекты, что означает возможность заранее вычислить их размер.

В только что выпущенной версии Restlet 2.1 M3 мы добавили простое свойство entityBuffering в ClientResource, чтобы облегчить это (по умолчанию установлено значение false).

Мы находимся в процессе обновления нашего примера «Первого приложения», чтобы проиллюстрировать обходной путь. Нам также пришлось справиться с GWT 2.2, нарушив совместимость с его предыдущим базовым API GWT 2.1, поэтому Restlet 2.1 будет работать только на GWT.

Дополнительные сведения доступны на этой странице: http://wiki.restlet.org/docs_2.1/13-restlet/21-restlet/318-restlet/303-restlet.html

С уважением,

Джером

Рестлет ~ Основатель и технический руководитель ~ http://www.restlet.org

Noelios Technologies ~ http://www.noelios.com

...