2013-09-26 52 views
0

我想在Jetty 8.1上运行骆驼服务器。 WebSocket运行正常,我可以在Init()方法中看到打印。码头,websockets和java.lang.NoSuchMethodError

但自从我设置我的骆驼context.txt一个的WebSocket:

<to uri="ws:JettyAlarmEndpoint"/> 

我有这个错误在码头控制台:

[       main] ContextLoader     ERROR Context initialization failed 
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [META-INF/spring/camel-context.xml]; nested exception is org.springfr 
amework.beans.FatalBeanException: Invalid NamespaceHandler class [org.apache.camel.spring.handler.CamelNamespaceHandler] for namespace [http://camel.apache.org/schema/spring]: problem with handler cla 
ss file or dependent class; nested exception is java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple; 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) 
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 

即:java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava /郎/字符串; [Ljava /郎/对象;)Lorg/SLF4J /助手/ FormattingTuple;

我的WebSocket是简单的,你可以看到:

package com.thales.ktdscis.server; 

import java.io.IOException; 
import java.util.Set; 
import java.util.concurrent.CopyOnWriteArraySet; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.eclipse.jetty.websocket.WebSocket; 
import org.eclipse.jetty.websocket.WebSocket.OnTextMessage; 
import org.eclipse.jetty.websocket.WebSocketServlet; 

import com.thales.ktdscis.utils.JSONUtils; 

/** 
* Servlet implementation class RiaWebSocket 
*/ 
@WebServlet("/test") 
public class JettyEndpoint extends WebSocketServlet { 
    private static final long   serialVersionUID = -1798046558917516877L; 
    public static final boolean   DEBUG    = false; 

    public final Set<ObserverWebSocket> users    = new CopyOnWriteArraySet<ObserverWebSocket>(); 

    @Override 
    public void init() throws ServletException { 
      System.out.println(" XXX JettyEndpoint().Init() XXX "); 
     super.init(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    } 

    @Override 
    public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) { 
     return new ObserverWebSocket(users); 
    } 

    public class ObserverWebSocket implements OnTextMessage { 
     private Connection    connection; 
     private Set<ObserverWebSocket> users; 

     public ObserverWebSocket(Set<ObserverWebSocket> users) { 
      this.users = users; 

     } 

     public void onMessage(String message) { 
      System.out.println("Message received : " + message); 
      unicast(message); 
     } 

     private void unicast(String message) { 
      try { 
       this.connection.sendMessage(message); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     private void broadcast(String message) { 
      for (ObserverWebSocket user : users) { 
       try { 
        user.connection.sendMessage(message); 
       } 
       catch (Exception e) { 
       } 
      } 
     } 

     @Override 
     public void onOpen(Connection connection) { 
      this.connection = connection; 
      users.add(this); 
     } 

     @Override 
     public void onClose(int closeCode, String message) { 
      users.remove(this); 
     } 

    } 

} 

我读过很多论坛的失踪在类路径中的.jar,我有我的类路径中“失踪法”,当我打开lib .jar。

我试着用javax.WebSocket和import org.eclipse.jetty.websocket.WebSocket。总是一样的错误。我想在每次调用“to”路由时在我的webSocket中运行一个特定的方法。理想情况下,发送消息到客户列表。

你有什么想法?

+0

可能重复[抛出异常,同时使用的logback/SLF4J(http://stackoverflow.com/questions/7165633/exception-thrown-while-using-的logback-SLF4J) –

回答

0

你的类路径中有多个slf4j罐。可能与不匹配的版本。

这已经被回答堆栈溢出:Exception thrown while using logback/slf4j

+0

我已经有了3的.jar登录相关: - log4j的-1.2.16 - SLF4J-API-1.6.1 - SLF4J-log4j12-1.6.4 – newelfik

+0

你有版本不匹配。 'slf4j-api.jar'和'slf4j-log4j12.jar'应该相互匹配。你应该使用'slf4j-log4j12.jar'的'log4j.jar'版本。有效配对示例:'slf4j-api-1.6.6.jar' +'slf4j-log4j12-1.6.6.jar' +'log4j-1.2.17.jar'。 (我刚刚使用了search.maven.org中的信息来查找) –