Java Spring MVC + Jetty Websocket不兼容的方法签名

时间:2017-12-25 02:05:53

标签: java spring spring-mvc jetty spring-websocket

我正在尝试使用Jetty实现Spring的websockets集成。在Spring文档中,它说如果我们使用Jetty,我们需要

  

"提供预配置的Jetty WebSocketServerFactory并插入它   进入Spring的DefaultHandshakeHandler"

这是他们在Spring文档(XML配置)中提供的示例

<bean id="handshakeHandler" class="org.springframework...DefaultHandshakeHandler">
        <constructor-arg ref="upgradeStrategy"/>
</bean>

    <bean id="upgradeStrategy" class="org.springframework...JettyRequestUpgradeStrategy">
        <constructor-arg ref="serverFactory"/>
    </bean>

    <bean id="serverFactory" class="org.eclipse.jetty...WebSocketServerFactory">
        <constructor-arg>
            <bean class="org.eclipse.jetty...WebSocketPolicy">
                <constructor-arg value="SERVER"/>
                <property name="inputBufferSize" value="8092"/>
                <property name="idleTimeout" value="600000"/>
            </bean>
        </constructor-arg>
    </bean>

如您所见,他们正在创建一个WEbSocketServerFactory并传入一个WebSocketPolicy。但是,最新的Jetty版本9.4.8具有不同的方法签名。

WebSocketServerFactory​(javax.servlet.ServletContext context, WebSocketPolicy policy)

除了WebSocketPolicy之外,它还需要一个ServletContext。当我使用Jetty运行我的应用程序时,由于方法签名不匹配,我收到错误。我注意到在旧版本的Jetty中,WebSocketServerFactory只采用了WebSocketPolicy(这会使上面的Spring配置工作),但我不想降级我的Jetty版本。

我想知道是否有人知道如何在XML配置中传递ServletContext。

提前致谢!

1 个答案:

答案 0 :(得分:1)

只需添加:

<constructor-arg type="javax.servlet.ServletContext"/>

到您的serverFactory bean定义,然后让Spring自动注入它。