Как GWT RPC загружает файлы политики сериализации?

Я исследую решение проблемы с GWT и OSGi + PAX-Web. Конкретная проблема заключается в том, что GWT не может загрузить файл политики сериализации, выдавая следующую ошибку:

ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?

Проблема лежит где-то между Equinox OSGi и PAX-WEB.

Чтобы найти решение, я хотел бы лучше понять, как GWT-RPC загружает файлы политики сериализации.

  • Каков их жизненный цикл? Когда они загружены? (Я вижу, это при запуске сервера. Какие-либо особенности в жизненном цикле? Перезагрузить?)
  • Как GWT загружает этот файл в свой стек? В какой момент в стеке запроса? Как GWT знает, откуда их загружать? Могу ли я сказать GWT, где он должен искать этот файл?

(заявление об отказе: я прочитал документы gwt по сгенерированным файлам [2]. Я ищу подробности более низкого уровня: у меня сложилось впечатление, что ошибка, с которой мы сталкиваемся, связана с HttpContext.getResource())

3 ответа

Решение

Это все в RemoteServiceServlet,

Каков их жизненный цикл? Когда они загружены? (Я вижу, это при запуске сервера. Какие-либо особенности в жизненном цикле? Перезагрузить?)

Они загружаются при первом использовании (первый запрос получен) и кэшируются в поле сервлета, поэтому их жизненный цикл привязан к таковому самого сервлета.

Как GWT загружает этот файл в свой стек? В какой момент в стеке запроса? Как GWT знает, откуда их загружать? Могу ли я сказать GWT, где он должен искать этот файл?

servlet.getServletContext().getResourceAsStream, Вы можете настроить это, переопределив doGetSerializationPolicy (как сказано в JavaDoc).
Имя файла (URL ресурса) строится из пути запроса и X-GWT-Permutation заголовок запроса.

Я искал файл.rpc в моем EAR-файле и обнаружил, что имя файла отличается от ошибки.

Решение: очистил кеш браузера и обновил.

Ответ, если мой Ник работал на меня.

У меня было веб-приложение, работающее с некоторыми классами в течение долгого времени.

Позже я добавил новые классы на сервер, и когда я пытался запустить веб-приложение, оно вызывало следующую ошибку:

ОШИБКА: файл политики сериализации '/newapp/C3055CD048198D732D03CA6901E503 86.gwt.rpc' не найден; Вы забыли включить его в это развертывание?

ВНИМАНИЕ: Не удалось получить SerializationPolicy 'C3055CD048198D732D03CA6901E5038 6' для модуля 'http://10.10.1.23:9200/newapp/'; будет использоваться устаревшая, совместимая с 1.3.3 политика сериализации. В результате могут возникать исключения SerializationException.

Затем я запустил приложение в окне инкогнито, которое очищает кеш, и оно работало для меня.

Другие вопросы по тегам