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">

to:

<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();


person Sikor    schedule 02.12.2014    source источник
comment
Вы проверили версию сервлета, которую вы используете в web.xml?   -  person Luiggi Mendoza    schedule 02.12.2014
comment
Да, такого рода ошибка почти всегда означает, что код был скомпилирован для одной версии зависимости, но в итоге заработал для другой версии этой зависимости. Почти наверняка дело в том, что servlet-api 3 не предоставляется во время выполнения.   -  person Matt Ball    schedule 02.12.2014
comment
Добавлен мой web.xml. Я попытался изменить версию веб-приложения на 3.1, но это выдает ошибку, поэтому я изменил ее на 3.0, но NoSuchMethodError все еще существует.   -  person Sikor    schedule 02.12.2014
comment
Вы должны знать, что нужно сделать два изменения: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" и version="3.0".   -  person Luiggi Mendoza    schedule 02.12.2014
comment
Я естественно поменял оба. При переходе на 3.0 он компилируется, но NoSuchMethodError все еще существует. В моем втором подходе я изменил xsd на 3.1, но при изменении версии на 3.1 он говорит: неправильное значение атрибута.   -  person Sikor    schedule 02.12.2014
comment
Попробовал другое решение в Edit2, изменив java.sun на xlmns.jcp.org, и теперь оно компилируется, но основная проблема все еще здесь. Любые советы будут оценены.   -  person Sikor    schedule 02.12.2014
comment
Это может быть ClassLoader проблема. Скорее всего, ваш сервер приложений использует собственную версию servlet.jar, которая несовместима с вашей. В зависимости от того, какой сервер приложений вы используете, существуют разные способы справиться с этим. Наиболее распространенным является настройка загрузчика классов для загрузки вашей версии servlet.jar перед загрузкой встроенной версии с сервера приложений.   -  person DJ.    schedule 02.12.2014
comment
Возможно, вы выполняете развертывание в контейнере, который еще не поддерживает Servlet API 3.0? Можете ли вы взглянуть на servlet.jar, предоставленный вашим контейнером? Что вы используете в качестве контейнера?   -  person Michal    schedule 02.12.2014
comment
@DJ - нет, вы не можете сделать это с помощью jar API, такого как servlet.jar. Другими словами, вы не можете сделать, например. старый tomcat 4.x JEE 6 совместим, просто добавив 3.1 servlet.jar в вашу войну.   -  person Michal    schedule 02.12.2014
comment
Хорошо, благодаря вашим советам я смог это исправить. Я запускал приложение на простом коте: запустить. Я изменил его, чтобы создать войну, и убедился, что он работает на Tomcat 7.0.54, и теперь он работает нормально. Спасибо всем за комментарии.   -  person Sikor    schedule 02.12.2014


Ответы (3)


Я запускал свое приложение на простом tomcat:run. После развертывания его на войне и проверки того, что я использую Tomcat 7, все в порядке. Спасибо всем комментаторам, вы указали мне правильное направление. Ваше здоровье.

EDIT: Имейте в виду, что tomcat 7 не поддерживает сервлеты 3.1, поэтому вам нужно либо использовать сервлет 3.0 с tomcat 7, либо сервлет 3.1 и tomcat 8.

person Sikor    schedule 02.12.2014

Это проблема, которая была решена в выпуске версии 4.1.1, используйте версию 4.1.1 или более позднюю или установите bean-компонент DispatcherServlet, установите 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.

person Jeremias Santos    schedule 22.04.2017

У меня была такая же проблема, и она была связана с groovy. Я добавил groovy в путь к классам (внешние библиотеки), используя свою IDE из sdk источников вместо использования maven или gradle зависимостей.

Кажется, что HttpServletResponse, который поставляется с зависимостью groovy, не имеет методов getStatus(). Итак, наконец, я удалил из пути к классам и добавил его в maven, и он работает.

person Pau    schedule 20.09.2017