2013-08-13 2 views
0

Я установил приложение 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> 
+0

из того, что я могу собрать, библиотеку вы использовали для создания проекта имеет различные файлы .class для того же объект. Проверьте, что созданный вами jvm совпадает с тем, над которым работает проект? T шляпа была бы моей единственной догадкой, хотя обычно это приводит к исключению номера версии. – aglassman

ответ

0

jboss-deployment-structure.xml должен быть в META-INF каталоге EAR. Он должен быть в src/main/resources/META-INF директории, если ваш Maven проекта.

+0

В соответствии с этим сообщением (https://community.jboss.org/thread/172482) это не обязательно должен быть этот каталог. Но я тоже это пробовал, и проблема все еще существует :(По какой-то причине исключение модуля не работает должным образом. Добавление зависимостей (включая java-объекты Guava) имеет значение с другой стороны. – Dennis

+0

Ах, моя ошибка в местах I Вам необходимо открыть архив EAR, чтобы убедиться, что jboss-deployment-structure.xml находится в каталоге META-INF? –

Смежные вопросы