Camel大气websocket组件:无法从WebsocketHandler获取onOpen/onClose/onError事件

Camel大气websocket组件:无法从WebsocketHandler获取onOpen/onClose/onError事件,websocket,apache-camel,atmosphere,Websocket,Apache Camel,Atmosphere,我正在集成websocket和camel,并选择现有的atmosphere websocket组件 我的步骤: 1) 添加到web.xml <!-- Camel servlet --> <servlet> <servlet-name>CamelWsServlet</servlet-name> <servlet-class>org.apache.camel.component.atmosphere.websocket.Ca

我正在集成websocket和camel,并选择现有的atmosphere websocket组件

我的步骤:

1) 添加到web.xml

<!-- Camel servlet -->
<servlet>
    <servlet-name>CamelWsServlet</servlet-name>
    <servlet-class>org.apache.camel.component.atmosphere.websocket.CamelWebSocketServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Camel servlet mapping -->
<servlet-mapping>
    <servlet-name>CamelWsServlet</servlet-name>
    <url-pattern>/camel/*</url-pattern>
</servlet-mapping>

CamelWsServlet
org.apache.camel.component.atmosphere.websocket.CamelWebSocketServlet
1.
CamelWsServlet
/骆驼/*
2) 添加到spring applicationContext.xml

    <bean id="websocketProcessor" class="mypackage.WebsocketProcessor" />

<camelContext id="main" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="atmosphere-websocket:///chat"/>
        <process ref="websocketProcessor"/>
    </route>
</camelContext>

3) 使用chrome扩展连接到websocket,使用 url:ws://localhost:8080/MyApp/camel/chat

结果:

工作正常我可以连接和发送消息 但出于某种原因,我看到ApacheCamel2.16.0(CamelContext:main)已经启动了两次

但主要的一点是,我需要有自己的带有websocket会话密钥和用户对象的映射,因此我需要访问org.apache.camel.component.atmosphere.websocket.WebsocketHandler中的onOpen/onClose/onError方法

有什么建议我该怎么做?也许该组件应该扩展以支持此功能


谢谢,

我修改了start web.xml上加载servlet的顺序,并将创建camel路由从spring上下文xml移动到Java,从而修复了两次启动camel的问题。唯一的问题是如何通知我的应用程序websocket事件onOpen/onClose/onError,这是在WebsocketHandler中发生的。作为实验,我使用这个建议来解决我的问题。但这是脏的。等待一些好的建议