Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring STOMP WebSocket:无法打开会话_Java_Spring_Google App Engine_Servlets_Stomp - Fatal编程技术网

Java Spring STOMP WebSocket:无法打开会话

Java Spring STOMP WebSocket:无法打开会话,java,spring,google-app-engine,servlets,stomp,Java,Spring,Google App Engine,Servlets,Stomp,我正在使用Google appengine标准环境和Spring,并试图让STOMP在一个基本网站上工作。我见过许多人和我一样犯同样的错误,但迄今为止,我尝试过的解决方案都没有奏效 这是我得到的错误: org.springframework.web.socket.sockjs.SockJsTransportFailureException: 无法打开会话;嵌套异常是 java.lang.IllegalArgumentException:必须在服务器上启用异步支持 servlet和用于异步请求处理

我正在使用Google appengine标准环境和Spring,并试图让STOMP在一个基本网站上工作。我见过许多人和我一样犯同样的错误,但迄今为止,我尝试过的解决方案都没有奏效

这是我得到的错误:

org.springframework.web.socket.sockjs.SockJsTransportFailureException: 无法打开会话;嵌套异常是
java.lang.IllegalArgumentException:必须在服务器上启用异步支持 servlet和用于异步请求处理中涉及的所有筛选器。这 在Java代码中使用Servlet API或通过向Servlet和筛选器声明添加“true”来完成 在web.xml中。您还必须使用Servlet 3.0+容器

这是我的ServletInitializer:

@EnableAsync
@EnableWebMvc
public class ServletInitializer extends SpringBootServletInitializer {

  @Bean
  public ServletRegistrationBean dispatcherServlet() {
    ServletRegistrationBean registration = new ServletRegistrationBean(
            new DispatcherServlet(), "/");
    registration.setAsyncSupported(true);
    return registration;
  }
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
  }

}
这是我的Websocket配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    }

}
这是我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.google.appengine.demos</groupId>
    <artifactId>springboot-appengine-standard</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>springboot-appengine-standard</name>
    <description>Demo project for Spring Boot</description>



    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring.boot.version>1.5.8.RELEASE</spring.boot.version> <!-- DO NOT UPDATE w/o MANUAL TESTING -->
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>

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

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
            <version>8.5.4</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-locator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>sockjs-client</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>stomp-websocket</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.1.0</version>
        </dependency>


        <!-- Exclude any jul-to-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- Include Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.boot.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
            </plugin>
            <!-- [START cloudplugin] -->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>1.3.1</version>
                <configuration>
                </configuration>
            </plugin>
            <!-- [END cloudplugin] -->

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>display-dependency-updates</goal>
                            <goal>display-plugin-updates</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>javax.servlet:javax.servlet-api</exclude>
                        <exclude>com.google.guava:guava</exclude> <!-- avoid android version -->
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

        </plugins>
    </build>


</project>

4.0.0
com.google.appengine.demos
springboot appengine标准
0.0.1-快照
战争
springboot appengine标准
SpringBoot的演示项目
UTF-8
UTF-8
1.5.8.1发布
1.8
${java.version}
${java.version}
org.springframework.boot
SpringBootStarterWeb
${spring.boot.version}
org.apache.tomcat.embed
tomcat嵌入websocket
8.5.4
javax.servlet
javax.servlet-api
3.1.0
假如
org.springframework.boot
弹簧靴起动器网箱
org.webjars
webjars定位器
org.webjars
sockjs客户端
1.0.2
org.webjars
踩踏网袋
2.3.3
org.webjars
独自创立
3.3.7
org.webjars
jquery
3.1.0
org.slf4j
七月至六月
假如
javax.servlet
javax.servlet-api
3.1.0
假如
org.springframework.boot
弹簧起动试验
${spring.boot.version}
测试
org.springframework.boot
spring启动依赖项
${spring.boot.version}
聚甲醛
进口
org.springframework.boot
springbootmaven插件
${spring.boot.version}
com.google.cloud.tools
appengine maven插件
1.3.1
org.codehaus.mojo
版本maven插件
2.4
编译
显示依赖项更新
显示插件更新
servlet:javax.servlet-api
番石榴:番石榴
maven战争插件
3.1.0
假的
这是我的appengine-web.xml:

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2017 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <threadsafe>true</threadsafe>
    <runtime>java8</runtime>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
        <property name="file.encoding" value="UTF-8" />
        <property name="DEFAULT_ENCODING" value="UTF-8" />
    </system-properties>
    <sessions-enabled>true</sessions-enabled>

</appengine-web-app>

真的
爪哇8
真的

您正在使用哪个运行时?Java7还是Java8?这是在appengine-web.xml文件中定义的。我使用的是java 8@Michaelmeyer。你能发布你的appengine-web.xml文件吗?我用它编辑了文章@MichaelMeyer@emirc谷歌应用程序引擎标准环境在默认情况下会阻止所有套接字连接,所以我的解决方案是将所有内容移动到计算引擎。