Revert "WebClientStreamableHttpTransport: use Spring-5 compatible methods (#649)" (#696)

This reverts commit 67f8eabb7a.
This commit is contained in:
Christian Tzolov 2025-11-28 13:35:10 +01:00 • committed by GitHub
commit 06fdc71ef2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -313,7 +313,7 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
// The spec mentions only ACCEPTED, but the existing SDKs can return
// 200 OK for notifications
if (is2xx(response)) {
if (response.statusCode().is2xxSuccessful()) {
Optional<MediaType> contentType = response.headers().contentType();
long contentLength = response.headers().contentLength().orElse(-1);
// Existing SDKs consume notifications with no response body nor
@ -397,15 +397,14 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
}
catch (IOException ex) {
toPropagate = new McpTransportException("Sending request failed, " + e.getMessage(), e);
logger.debug("Received content together with {} HTTP code response: {}", response.rawStatusCode(),
body);
logger.debug("Received content together with {} HTTP code response: {}", response.statusCode(), body);
}
// Some implementations can return 400 when presented with a
// session id that it doesn't know about, so we will
// invalidate the session
// https://github.com/modelcontextprotocol/typescript-sdk/issues/389
if (isBadRequest(responseException)) {
if (responseException.getStatusCode().isSameCodeAs(HttpStatus.BAD_REQUEST)) {
if (!sessionRepresentation.equals(MISSING_SESSION_ID)) {
return Mono.error(new McpTransportSessionNotFoundException(sessionRepresentation, toPropagate));
}
@ -425,8 +424,16 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
return Flux.from(sessionStream.consumeSseStream(idWithMessages));
}
private static boolean isNotFound(ClientResponse response) {
return response.statusCode().isSameCodeAs(HttpStatus.NOT_FOUND);
}
private static boolean isNotAllowed(ClientResponse response) {
return response.statusCode().isSameCodeAs(HttpStatus.METHOD_NOT_ALLOWED);
}
private static boolean isEventStream(ClientResponse response) {
return is2xx(response) && response.headers().contentType().isPresent()
return response.statusCode().is2xxSuccessful() && response.headers().contentType().isPresent()
&& response.headers().contentType().get().isCompatibleWith(MediaType.TEXT_EVENT_STREAM);
}
@ -605,36 +612,4 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
}
/**
* Needed for Spring 5 compatibility
*/
@SuppressWarnings("deprecation")
private static boolean isBadRequest(final WebClientResponseException responseException) {
return responseException.getRawStatusCode() == HttpStatus.BAD_REQUEST.value();
}
/**
* Needed for Spring 5 compatibility
*/
@SuppressWarnings("deprecation")
private static boolean isNotFound(ClientResponse response) {
return response.rawStatusCode() == HttpStatus.NOT_FOUND.value();
}
/**
* Needed for Spring 5 compatibility
*/
@SuppressWarnings("deprecation")
private static boolean isNotAllowed(ClientResponse response) {
return response.rawStatusCode() == HttpStatus.METHOD_NOT_ALLOWED.value();
}
/**
* Needed for Spring 5 compatibility
*/
@SuppressWarnings("deprecation")
private static boolean is2xx(final ClientResponse response) {
return response.rawStatusCode() >= 200 && response.rawStatusCode() < 300;
}
}