У меня в Jetty работает несколько модулей GWT и веб-приложений. Каждый из них хочет использовать мой LoginService
RPC-интерфейс, поэтому я поместил этот интерфейс и его реализацию сервлета в общий модуль. Я обслуживаю сервлет (LoginServiceImpl
) из корневого веб-контекста, и web.xml
предоставляет его по URL-адресу "/ loginService". В другом модуле GWT, чтобы использовать этот сервис, мне нужно было установить точку входа, как это ...
LoginServiceAsync loginService = GWT.create(LoginService.class);
ServiceDefTarget t = (ServiceDefTarget)loginService;
t.setServiceEntryPoint("/loginService");
Теперь модуль, пытающийся использовать loginService, называется Discussions , и я получаю эту ошибку на сервере.
ERROR: The serialization policy file
'/discussions/discussions/7B344C69AD493C1EC707EC98FE148AA0.gwt.rpc' was not found;
did you forget to include it in this deployment?
Итак, сервлет сообщает об ошибке, в которой упоминается клиент (модуль обсуждений). Я предполагаю, что RPC-сантехника передала имя этого файла .rpc через клиента, и теперь сервлет ищет его. (?) В качестве эксперимента я скопировал файлы * .gwt.rpc из модуля обсуждений в корневой веб-контекст, чтобы сервлет мог их найти. Это остановило ошибку. Но я все еще получаю другую ошибку:
com.google.gwt.user.client.rpc.SerializationException: Type
'mystuff.web.shared.User' was not assignable to
'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field
serializer. For security purposes, this type will not be serialized.: ...
Этот класс сериализуем; раньше он работал в других модулях, так что теперь я потерялся.
Как правильно использовать LoginService
из нескольких клиентских модулей?
Обновление:
Эта ошибка обнаруживалась в размещенном devmode и исчезла после полной компиляции. Возможно, это связано с несогласованным режимом политики сериализации gwt . Я обновлю еще раз, если смогу лучше воспроизвести проблему.