Я установил приложение GWT, которое развернуто на сервере JBoss и (как правило) выполняет по мере необходимости. Он основан на Maven и разделен на сервер и веб-модуль. Поскольку я недавно был представлен в библиотеку Guava и благодаря своей совместимости с GWT, я решил включить его в свой проект.GWT + Guava + JBoss: исключение класса загрузчика при отправке входящего вызова RPC
При попытке отправить объект класса Гуавы Факультативного от сервера к сети, я, к сожалению, претерпеть следующее сообщение об ошибке приходит на консоли JBoss:
Exception while dispatching incoming RPC call:
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract com.google.common.base.Optional com.company.project.client.rpc.ProjectService.getSearchWords(java.lang.String)' threw an unexpected exception:
java.lang.LinkageError: loader constraint violation: when resolving interface method "com.company.project.service.ProjectController.getSearchWords(Ljava/lang/String;)Lcom/google/common/base/Optional;"
the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, com/company/project/server/ProjectServlet, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for resolved class, com/company/project/service/ProjectController, have different Class objects for the type va/lang/String;)Lcom/google/common/base/Optional; used in the signature
Это линия, содержащаяся в Проектсервисе. Java файл:
Optional<Set<String>> getSearchWords(String token);
И аналог метода подписи в ProjectController.java (который представляет собой интерфейс для ProjectControllerBean.java) выглядит так же.
Эта проблема возникает только в сочетании с классом Guava «Необязательный». Любой другой метод RPC работает хорошо.
Кто-нибудь знает, что может происходить и как это исправить? Я был бы очень рад за любую помощь!
Заранее спасибо.
EDIT # 1
Я предполагаю, что это, возможно, придется что-то делать с тем фактом, что JBoss обеспечивает устаревшую версию библиотеки Гуава, что, вероятно, загруженной через ModuleClassLoader. Но, к сожалению, я постоянно не отключить этот автоматизм через JBoss-развертывания-structure.xml :(
я положил этот файл в SRC/основное/приложение моего EAR со следующим содержанием:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="com.google.guava" />
</exclusions>
</deployment>
<sub-deployment name="project-server.jar">
<exclusions>
<module name="com.google.guava" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
из того, что я могу собрать, библиотеку вы использовали для создания проекта имеет различные файлы .class для того же объект. Проверьте, что созданный вами jvm совпадает с тем, над которым работает проект? T шляпа была бы моей единственной догадкой, хотя обычно это приводит к исключению номера версии. – aglassman