2014-11-25 103 views
0

当我们在Tomcat 7.0.56上部署我们的站点时,我在使用websockets的弹簧应用程序时出错。我尝试访问的WebSocket端点路径是application/wsconnection/ws它显示nosuchfielderror:PATCH带websockets的弹簧PATCH

exception 

javax.servlet.ServletException: Servlet execution threw an exception 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

java.lang.NoSuchFieldError: PATCH 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:833) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 

,但是当我尝试在本地运行它

Can "Upgrade" only to "WebSocket". 

确实错误发生的原因与Tomcat的罐子冲突?我检查了tomcat.websocket和其他人的har的源文件,但没有PATCH字段。 websocket与服务器端点握手时发送了什么?

servlet的路径是/wsconnection/*,端点路径是'/ ws`。

的pom.xml

<properties> 
    <org.springframework-version>4.0.6.RELEASE</org.springframework-version> 
</properties> 
<dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>6.0</version> 
      <scope>provided</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>3rd-party</groupId> 
        <artifactId>javaee</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.servlet.jsp</groupId> 
        <artifactId>jsp-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.sn</groupId> 
      <artifactId>sn-core</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.mina</groupId> 
      <artifactId>mina-core</artifactId> 
      <version>2.0.4</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.apache.mina</groupId> 
        <artifactId>mina-core</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.apache.mina</groupId> 
        <artifactId>mina-integration-spring</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <!-- websocket --> 


     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context-support</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-aop</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-tx</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jms</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jms</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jdbc</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 



     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-beans</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

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

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

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

     <dependency> 
      <groupId>org.eclipse.jetty.websocket</groupId> 
      <artifactId>websocket-server</artifactId> 
      <version>9.2.4.v20141103</version> 
     </dependency> 

的web.xml

<!-- servlet --> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/wsconnection/*</url-pattern> 
    </servlet-mapping> 

    <!-- 15 minutes --> 
    <session-config> 
     <session-timeout>15</session-timeout> 
    </session-config> 

    <!-- encoding filter --> 
    <filter> 
     <filter-name>encodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>encodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- struts filter --> 
    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

servlet的context.xml中/调度程序-servlet.xml中

它仅包含包括其他XML上下文。

+0

能否请你分享一下pom.xml – 2014-11-25 10:04:21

回答

0

我不认为这是一个tomcat问题。这种例外表明版本不匹配。 确保您在所有弹簧依赖关系中使用相同的版本。

与你分享你的pom.xml,web.xml和servlet上下文也会有所帮助。

+0

@ EhabAl-Hakwati我已经用web.xml,pom.xml和servlet – 2014-11-26 01:30:41

+0

根据文档更新了我的问题NoSuchFieldError“通常,这个错误被编译器捕获;这个错误只能在运行时发生,如果类的定义发生了不兼容的变化。“ https://docs.oracle.com/javase/7/docs/api/java/lang/NoSuchFieldError.html 和挖掘弹簧4.0.6回购我发现PATCH存在 – 2014-11-26 10:08:37

+0

@Override \t保护无效更多.. 。服务(HttpServletRequest的请求,响应HttpServletResponse的) \t \t \t抛出的ServletException,IOException异常{ \t \t字符串方法= request.getMethod();如果(method.equalsIgnoreCase(RequestMethod.PATCH.name())){ \t \t \t processRequest(request,response); \t \t} \t \t否则{ \t \t \t super.service(请求,响应); \t \t} \t} – 2014-11-26 10:08:53