Как 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.
Затем я запустил приложение в окне инкогнито, которое очищает кеш, и оно работало для меня.