Spring Boot 3-Upgrade verursacht NoSuchMethodError für ClientHttpResponse.getStatusCode() – wie werden ältere Spring BooJava

Java-Forum
Anonymous
 Spring Boot 3-Upgrade verursacht NoSuchMethodError für ClientHttpResponse.getStatusCode() – wie werden ältere Spring Boo

Post by Anonymous »

Ich aktualisiere meine Hauptanwendung von Spring Boot 2.x auf 3.x.
Das Upgrade ist größtenteils erfolgreich, mit Ausnahme eines Laufzeitkompatibilitätsproblems, das durch interne Bibliotheken von Drittanbietern oder älteren Versionen verursacht wird, die immer noch von Spring Boot 2.x und der RestTemplate-API abhängen.

Kontext:
  • Meine Hauptanwendung verwendet jetzt:

    Spring Boot: 3.x
  • Spring Framework: 6.x
  • JDK: 17
[*]Ich habe jedoch Hunderte von gemeinsam genutzten SDKs/Bibliotheken (einige intern, andere von Drittanbietern), die:
  • gegen Spring Boot 2.x kompiliert werden
  • org.springframework.web.client.RestTemplate verwenden
  • Interner Aufruf:

    Code: Select all

    org.springframework.http.client.ClientHttpResponse#getStatusCode()
    
    erwarte, dass es org.springframework.http.HttpStatus zurückgibt.


Nach dem Upgrade erhalte ich während der Laufzeit die folgende Fehlermeldung:

Code: Select all

java.lang.NoSuchMethodError: ‘org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()
Dies geschieht in einem ClientHttpRequestInterceptor in einem der älteren SDKs, die ich nicht ändern kann.
Hier ist ein Ausschnitt aus dem Stack-Trace:

Code: Select all

Caused by: java.lang.NoSuchMethodError: ‘org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()’
at com.legacy.sdk.interceptor.LegacyInterceptor.intercept(LegacyInterceptor.java:46)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:900)
Dies ist sinnvoll, da Spring Framework 6.x die Methodensignatur geändert hat:
Alt (Spring Boot 2.x / Framework 5.x):
HttpStatus ClientHttpResponse.getStatusCode();
Neu (Spring Boot 3.x / Framework 6.x):
HttpStatusCode ClientHttpResponse.getStatusCode();
Die alte Methode wurde entfernt (nicht veraltet), sodass Bibliotheken, die die alte Signatur erwarten, abstürzen.
Zusätzliche Details
  • Ich kann diese Legacy-Bibliotheken nicht sofort aktualisieren – einige sind extern, andere sehr tief integriert.
  • Ich habe meinen eigenen Code bereits migriert, um stattdessen RestClient zu verwenden RestTemplate.
  • Altabhängige Abhängigkeiten verwenden jedoch immer noch RestTemplate, und ich kann sie nicht ändern.
Gibt es eine offizielle oder von der Community empfohlene Strategie, um mit Spring Boot 2.x kompilierte SDKs (die auf veralteten/entfernten Methoden wie ClientHttpResponse#getStatusCode() basieren) in einer Spring Boot 3-Anwendung auszuführen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post