2014-10-28 3 views
0

Я пытаюсь внедрить соединение веб-соединения jsr 356 из-за войны, развернутой в причале.Ошибка java.lang.linkage при попытке использования jsr 356

Я использую это в качестве руководства: http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty-91.html

(я могу найти много учебников по существу с помощью JSR 356 со встроенным сервером молов, но ни на строительство соединения WebSocket в пределах существующего сервера - буду там любые хорошие вне там)

Всякий раз, когда я запускаю код, перечисленные выше, я получаю следующее сообщение об ошибке:

java.lang.LinkageError: loader constraint violation: when resolving method "org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer;" the class loader (instance of org/eclipse/jetty/webapp/WebAppClassLoader) of the current class, com/me/stuff/data/DataServer, and the class loader (instance of org/eclipse/jetty/start/Classpath$Loader) for resolved class, org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer, have different Class objects for the type y.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer; used in the signature 

, который относится к коду

ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); 

Я затрудняюсь это понять. Я использую следующие строки из Gradle принести в WebSocket вещи:

providedCompile (
    [ group: 'javax.websocket', name: 'javax.websocket-api', version: '+'], 
    [ group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '+' ] 
    ) 

    compile (
    [ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-server-impl', version: '+'], 
    [ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-client-impl', version: '+'] 
    ) 

Я вижу, что и javax-WebSocket-сервер осущий банка и javax.websocket-апи банки содержат классы ServerContainer ... но я включаю только один из тех, что были в моем военном файле. Является ли пристань из собственной внутренней старой версии? Или я совершенно неправильно понимаю источник проблемы?

версия Причал у меня есть: Пристань-9.2.1.v20140609

ответ

1

В WebSocket банки не должны быть в вашем WAR.

Извлеките следующие банки из каталога WAR WEB-INF/lib/.

  • javax.websocket-api-*.jar - The javax.websocket API-банка
  • javax-websocket-server-impl-*.jar - The javax.websocket.server причала сервер * реализация баночка
  • javax-websocket-client-impl -.. Причал javax.websocket * (клиент) банка

Это потому, что вы кодируете/компилируете классы javax.websocket.* API.

API и реализация API предоставляются самим Jetty.

Это ничем не отличается от того, когда вы кодируете сервлет-api. (а именно, что вы не включаете сервлет-api и реализацию сервлета-api в своей WAR)

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