Java 弹簧4.2.4 WebSocket/Stomp和Tomcat失败诱饵

Java 弹簧4.2.4 WebSocket/Stomp和Tomcat失败诱饵,java,spring,maven,tomcat,spring-websocket,Java,Spring,Maven,Tomcat,Spring Websocket,在tomcat上运行的spring(4.2.4)的帮助下,我一直在努力构建一个示例web应用程序,该应用程序使用stomp over websocket/sockjs。开发环境基于eclipse luna和嵌入式maven。在任何情况下,请遵循此处列出的spring指南: 最初,我使用的配置是dispatcher servlet.xml中的完整message broker(不是简单的内存代理): <websocket:message-broker application-desti

在tomcat上运行的spring(4.2.4)的帮助下,我一直在努力构建一个示例web应用程序,该应用程序使用stomp over websocket/sockjs。开发环境基于eclipse luna和嵌入式maven。在任何情况下,请遵循此处列出的spring指南: 最初,我使用的配置是dispatcher servlet.xml中的完整message broker(不是简单的内存代理):

    <websocket:message-broker application-destination-prefix="/app">
       <websocket:stomp-endpoint path="/stomp">
          <websocket:sockjs/>
       </websocket:stomp-endpoint>
       <websocket:stomp-broker-relay prefix="/topic,/queue"
           relay-host="localhost" relay-port="61613"
           heartbeat-send-interval="20000" heartbeat-receive-interval="21000"
           client-login="my-client" client-passcode="aesdf"
           system-login="syslogin" system-passcode="qwrt"/>
       <websocket:client-inbound-channel>
            <websocket:executor core-pool-size="30" max-pool-size="60" keep-alive-seconds="300"/>
       </websocket:client-inbound-channel>
       <websocket:client-outbound-channel>
            <websocket:executor core-pool-size="31" max-pool-size="61" keep-alive-seconds="301"/>
       </websocket:client-outbound-channel>
       <websocket:broker-channel>
            <websocket:executor core-pool-size="32" max-pool-size="62" keep-alive-seconds="302"/>
        </websocket:broker-channel> 
</websocket:message-broker>  
并从上面的跟踪中截取一些以节省空间…

基本上,这次它无法创建beanorg.springframework.web.socket.server.support.WebSocketHandlerMapping#0',因为类:javax/websocket/WebSocketContainer未找到,所以初始化错误。但是,该类位于项目的类路径中,因为我可以看到它正在被包含使用tomcat的库。我知道这有很多问题要问,但有人能解释一下spring、tomcat和websockets的情况吗?因为这个问题我似乎无法解决,所以我工作真的很晚了。
对于完整性,我还包括项目的pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dynamic-list</groupId>
  <artifactId>DynamicList</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>DynamicList Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-webflow</artifactId>
            <version>2.4.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.json</artifactId>
            <version>1.0.4</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.1-1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.13.1</version>
        </dependency>

        <!-- <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency> -->
  </dependencies>
  <build>
    <finalName>DynamicList</finalName>
  </build>
</project>

4.0.0
com.dynamic-list
动力学家
战争
0.0.1-快照
DynamicList Maven Webapp
http://maven.apache.org
4.2.4.1发布
朱尼特
朱尼特
3.8.1
测试
javax.servlet
jstl
1.2
org.springframework
弹簧芯
${spring.version}
org.springframework
弹簧网
${spring.version}
org.springframework
SpringWebMVC
${spring.version}
org.springframework
spring消息
${spring.version}
org.springframework.webflow
SpringWebFlow
2.4.2.2发布
玻璃鱼
javax.json
1.0.4
com.fasterxml.jackson.core
杰克逊核心
2.7.1
com.fasterxml.jackson.core
杰克逊注释
2.7.1
com.fasterxml.jackson.core
杰克逊数据绑定
2.7.1-1
org.springframework
弹簧网袋
4.2.4.1发布
org.projectreactor
堆芯
1.0.0.1版本
org.apache.activemq
activemq全部
5.13.1
动力学家

您似乎缺少jar文件作为依赖项。选择使用Spring4.x版本时,始终建议使用相应版本的BOM表。请在您的POM文件中使用springframework 4.2.4发行版物料清单,这样您就不会错过应用程序类路径中的任何依赖jar文件。感谢您的回复,但我不确定这是否是问题所在……如果您查看随附的POM,javaee api中有一个注释掉的部分,如果未注释,并且范围更改为compile(而不是提供),则列出的异常将消失,但随后会抛出一个新异常,该异常抱怨spring Dispatcher servlet无法转换为javax.servlet。另外,正如我前面提到的,javax.websocket.WebSocketContainer包含在Eclipse中的Tomcats依赖项中,因为我可以看到它。我不明白问题是什么。
 <websocket:message-broker application-destination-prefix="/app">
       <websocket:stomp-endpoint path="/stomp">
            <websocket:sockjs websocket-enabled="false">
                <websocket:transport-handlers register-defaults="true">
                    <ref bean="webSocketTransportHandler"/>
                </websocket:transport-handlers>
            </websocket:sockjs>
       </websocket:stomp-endpoint>
       <websocket:stomp-broker-relay prefix="/topic,/queue"
           relay-host="localhost" relay-port="61613"
           heartbeat-send-interval="20000" heartbeat-receive-interval="21000"
           client-login="my-client" client-passcode="aesdf"
           system-login="syslogin" system-passcode="qwrt"/>
       <websocket:client-inbound-channel>
            <websocket:executor core-pool-size="300" max-pool-size="600" keep-alive-seconds="300"/>
       </websocket:client-inbound-channel>
       <websocket:client-outbound-channel>
            <websocket:executor core-pool-size="301" max-pool-size="601" keep-alive-seconds="301"/>
       </websocket:client-outbound-channel>
       <websocket:broker-channel>
            <websocket:executor core-pool-size="302" max-pool-size="602" keep-alive-seconds="302"/>
        </websocket:broker-channel> 
    </websocket:message-broker>


    <bean id="defaultHandshakeHandler" class="org.springframework.web.socket.server.support.DefaultHandshakeHandler">
         <constructor-arg ref="tomcatUpgradeStrategy"/>
    </bean>

    <bean id="webSocketTransportHandler" class="org.springframework.web.socket.sockjs.transport.handler.WebSocketTransportHandler">
         <constructor-arg ref="defaultHandshakeHandler"/>
    </bean>

    <bean id="tomcatUpgradeStrategy" class="org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy"/>
INFO: Initializing Spring FrameworkServlet 'dispatcher'
 WARN | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.socket.server.support.WebSocketHandlerMapping#0': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/websocket/WebSocketContainer
ERROR | Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.socket.server.support.WebSocketHandlerMapping#0': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/websocket/WebSocketContainer
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.NoClassDefFoundError: javax/websocket/WebSocketContainer
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
    at java.lang.Class.getDeclaredMethods(Class.java:1868)
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:609)  
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dynamic-list</groupId>
  <artifactId>DynamicList</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>DynamicList Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-webflow</artifactId>
            <version>2.4.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.json</artifactId>
            <version>1.0.4</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.1-1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.13.1</version>
        </dependency>

        <!-- <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency> -->
  </dependencies>
  <build>
    <finalName>DynamicList</finalName>
  </build>
</project>