Обновление Spring boot 3 — java.lang.NoSuchMethodError

Наше приложение переносится на Spring boot 3 и Spring 6. Мы видим ошибку: "java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()" при тестировании с помощью запроса.

Ошибок компиляции нет, и сборка maven прошла нормально.

Использовал это как ссылку: java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()'

и проверено, что org.springframework:spring-web:jar:6.1.10 — это используемая версия (из дерева зависимостей).

Только в .factoryPath в eclipse есть ссылка на более старую версию (<factorypathentry kind = "VARJAR" id = "M2_REPO/org/springframework/spring-web/5.3.29/spring-web-5.3.29.jar" enabled = "true" runInBatchMode = "false"/> ) . В дереве зависимостей я не вижу ссылки на более старую Spring-Web.

Есть какие-нибудь указания на ошибку обновления?

Другие использованные банки:

spring-security-oauth2:jar:2.5.1.RELEASE
spring-webmvc:jar:6.1.10
spring-security-core:jar:6.2.5
spring-boot-starter:jar:3.2.7
spring-security-oauth2-client:jar:6.2.5

Код работает как ожидалось

Что меня пугает, так это тот факт, что вы заявляете об обновлении Spring Boot и обновлении Spring. Такое ощущение, что вы управляете обоими по отдельности, чего делать не следует. Добавьте свой build.gradle к вопросу, чтобы узнать, есть ли проблемы с конфликтующими зависимостями.

M. Deinum 04.09.2024 09:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная причина этой ошибки заключается в том, что каким-то образом в вашем пути к классу уже скомпилированный двоичный файл пытается вызвать .getStatusCode() из ClientHttpResponse из Spring Framework 5 . Этот класс был изменен в Spring Framework 6 и Spring Boot 3, так что он возвращает HttpStatusCode вместо HttpStatus из предыдущей реализации. Двоичный файл ожидает вызова сигнатуры метода HttpStatus getStatusCode(), но среда выполнения имеет в пути к классам сигнатуру метода из Spring Framework 6, определенную как HttpStatusCode getStatusCode(). Следовательно, не возникает исключения такого метода. Вот предыдущий ответ, который поможет вам понять, почему разница в типе возвращаемого значения заставляет среду выполнения выдавать ошибку «нет такого метода».

Найдите точное место, откуда берется трассировка стека, и исследуйте двоичные файлы. Скорее всего, вы обнаружите, что какой-то файл .class не скомпилирован с новой версией Spring-Framework.

Обновлено: По сути, несовместимость, вызывающая вышеизложенное, также может быть определена в вашем вопросе. spring-security-oauth2:jar:2.5.1.RELEASE не совместим с Spring Framework 6 и Spring Boot 3. Этот jar-файл уже скомпилирован с Spring Framework 5.

Вам следует перенести код и заменить зависимость spring-security-oauth2:jar:2.5.1.RELEASE, например, на spring-security-oauth2-client:6.3.3 и/или spring-security-oauth2-resource-server:6.3.3, которые скомпилированы с помощью Spring Framework 6.

Спасибо, Панайотис. Это помогает многое понять. Мы используем OAuth2RestTemplate в нашем приложении. Есть ли у Spring-security-oauth2-client его поддержка?

stackuser 04.09.2024 16:53

Другие вопросы по теме

MapStruct: сопоставление исходного класса с объектом (с UUID поля) с целевым объектом с UUID поля приводит к нулевому результату
Как создать универсальную потребительскую фабрику Кафки?
Приложение Spring Framework возвращает только ошибки 404
Spring: получение ошибки грамматики неправильного sql для именованного параметра – удаление параметра устраняет ошибку
Ошибка создания bean-компонента с именем «entityManagerFactory», определенным в ресурсе пути к классу: невозможно построить Hibernate SessionFactory;
Как использовать внешние файлы конфигурации для обеспечения специфичных для среды конфигураций в приложении Spring Boot?
@SpringBootTest Тесты с WebTestClient не работают после перехода с Spring-boot-starter-parent версии 3.2.5 на 3.3.3
CVE-2024-38809: DoS Spring Framework через условный HTTP-запрос
Как динамически обрабатывать предложение WHERE, если от клиента не было отправлено никаких входных параметров
Невозможно внедрить @Repository в @Service