的NoSuchMethodError同时呼吁response.getStatus()

问题描述:

我想这是某种依赖性问题的所以这里是我的树:的NoSuchMethodError同时呼吁response.getStatus()

[INFO] Sikor:BrowserGame:war:1.0-SNAPSHOT 
[INFO] +- junit:junit:jar:3.8.1:test 
[INFO] +- org.springframework:spring-context:jar:4.1.1.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:4.1.1.RELEASE:compile 
[INFO] | +- org.springframework:spring-beans:jar:4.1.1.RELEASE:compile 
[INFO] | +- org.springframework:spring-core:jar:4.1.1.RELEASE:compile 
[INFO] | | \- commons-logging:commons-logging:jar:1.1.3:compile 
[INFO] | \- org.springframework:spring-expression:jar:4.1.1.RELEASE:compile 
[INFO] +- org.springframework:spring-webmvc:jar:4.1.1.RELEASE:compile 
[INFO] | \- org.springframework:spring-web:jar:4.1.1.RELEASE:compile 
[INFO] +- org.springframework:spring-context-support:jar:4.1.1.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-web:jar:3.2.5.RELEASE:compile 
[INFO] | +- aopalliance:aopalliance:jar:1.0:compile 
[INFO] | \- org.springframework.security:spring-security-core:jar:3.2.5.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-config:jar:3.2.5.RELEASE:compile 
[INFO] +- org.springframework.security:spring-security-taglibs:jar:3.2.5.RELEASE:compile 
[INFO] | \- org.springframework.security:spring-security-acl:jar:3.2.5.RELEASE:compile 
[INFO] +- org.thymeleaf:thymeleaf-spring4:jar:2.1.3.RELEASE:compile 
[INFO] | \- org.thymeleaf:thymeleaf:jar:2.1.3.RELEASE:compile 
[INFO] |  +- ognl:ognl:jar:3.0.6:compile 
[INFO] |  \- org.unbescape:unbescape:jar:1.0:compile 
[INFO] +- org.thymeleaf.extras:thymeleaf-extras-springsecurity3:jar:2.1.1.RELEASE:compile 
[INFO] +- nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:jar:1.2.7:compile 
[INFO] +- org.hibernate:hibernate-entitymanager:jar:4.3.5.FINAL:compile 
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile 
[INFO] | +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile 
[INFO] | +- org.hibernate:hibernate-core:jar:4.3.5.Final:compile 
[INFO] | | +- antlr:antlr:jar:2.7.7:compile 
[INFO] | | \- org.jboss:jandex:jar:1.1.0.Final:compile 
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile 
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile 
[INFO] | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.4.Final:compile 
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile 
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile 
[INFO] | \- org.javassist:javassist:jar:3.18.1-GA:compile 
[INFO] +- org.hibernate:hibernate-validator:jar:4.3.2.Final:compile 
[INFO] | \- javax.validation:validation-api:jar:1.0.0.GA:compile 
[INFO] +- mysql:mysql-connector-java:jar:5.1.32:compile 
[INFO] +- org.springframework:spring-orm:jar:4.1.1.RELEASE:compile 
[INFO] | +- org.springframework:spring-jdbc:jar:4.1.1.RELEASE:compile 
[INFO] | \- org.springframework:spring-tx:jar:4.1.1.RELEASE:compile 
[INFO] +- org.springframework.data:spring-data-jpa:jar:1.6.4.RELEASE:compile 
[INFO] | +- org.springframework.data:spring-data-commons:jar:1.8.4.RELEASE:compile 
[INFO] | +- org.aspectj:aspectjrt:jar:1.8.1:compile 
[INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.7.7:runtime 
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided 
[INFO] +- org.slf4j:slf4j-api:jar:1.7.5:compile 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile 
[INFO] | \- log4j:log4j:jar:1.2.16:compile 
[INFO] \- javax.mail:mail:jar:1.4:compile 
[INFO] \- javax.activation:activation:jar:1.1:compile 

从我发现了,春天4.1.1应该与使用javax工作。 servlet 3.1.0但我得到java.lang.NoSuchMethodError:javax.servlet.http.HttpServletResponse.getStatus()I当我的拦截器内调用response.getStatus()。
如果有人能帮忙,我会很高兴。提前致谢。

编辑:新增的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <servlet> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/config/mvc-dispatcher-servlet.xml</param-value> 
     </init-param> 
     <init-param> 
      <param-name>throwExceptionIfNoHandlerFound</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/config/root-context.xml 
     </param-value> 
    </context-param> 

</web-app> 



EDIT2:改变了以下内容:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

到:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 

,但我调用response.getStatus()时仍然会出错。

+2

您是否检查过您在web.xml中使用的Servlet版本? – 2014-12-02 19:35:07

+1

是的,这类错误几乎总是意味着代码是针对一个版本的依赖性编译的,但最终针对该依赖性的不同版本运行。几乎可以肯定的是,servlet-api 3不是在运行时提供的。 – 2014-12-02 19:38:18

+0

添加了我的web.xml。我试着将web-app版本更改为3.1,但它给了我一个错误,所以更改为3.0,但NoSuchMethodError仍然存在。 – Sikor 2014-12-02 19:45:56

我正在一个简单的tomcat上运行我的应用程序:运行。将它部署到战争并确保我使用Tomcat 7后,一切都很好。感谢所有评论员,您指出了我的正确方向。干杯。

编辑:请记住,Tomcat的7不支持的Servlet 3.1,所以你要么必须使用的servlet 3.0和Tomcat 7或Servlet 3.1和tomcat 8

这是一个已得到解决的问题版本4.1.1发布,使用版本4.1.1或更高版本,或者设置DispatcherServlet bean,将publishEvents设置为false

This is a problem that has been resolved in version 4.1.1 release, use version 4.1.1 or higher, or set the DispatcherServlet bean, set publishEvents to false .

我有同样的问题,它与常规有关。我使用sdk来源的IDE,而不是使用mavengradle依赖关系,将groovy添加到类路径(外部库)。

看起来HttpServletResponse它与依赖groovy没有getStatus()方法。所以最后,我从类路径中删除,并将其添加到maven中并且它可以工作。