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 // The spec mentions only ACCEPTED, but the existing SDKs can return
// 200 OK for notifications // 200 OK for notifications
if (is2xx(response)) { if (response.statusCode().is2xxSuccessful()) {
Optional<MediaType> contentType = response.headers().contentType(); Optional<MediaType> contentType = response.headers().contentType();
long contentLength = response.headers().contentLength().orElse(-1); long contentLength = response.headers().contentLength().orElse(-1);
// Existing SDKs consume notifications with no response body nor // Existing SDKs consume notifications with no response body nor
@ -397,15 +397,14 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
} }
catch (IOException ex) { catch (IOException ex) {
toPropagate = new McpTransportException("Sending request failed, " + e.getMessage(), e); toPropagate = new McpTransportException("Sending request failed, " + e.getMessage(), e);
logger.debug("Received content together with {} HTTP code response: {}", response.rawStatusCode(), logger.debug("Received content together with {} HTTP code response: {}", response.statusCode(), body);
body);
} }
// Some implementations can return 400 when presented with a // Some implementations can return 400 when presented with a
// session id that it doesn't know about, so we will // session id that it doesn't know about, so we will
// invalidate the session // invalidate the session
// https://github.com/modelcontextprotocol/typescript-sdk/issues/389 // https://github.com/modelcontextprotocol/typescript-sdk/issues/389
if (isBadRequest(responseException)) { if (responseException.getStatusCode().isSameCodeAs(HttpStatus.BAD_REQUEST)) {
if (!sessionRepresentation.equals(MISSING_SESSION_ID)) { if (!sessionRepresentation.equals(MISSING_SESSION_ID)) {
return Mono.error(new McpTransportSessionNotFoundException(sessionRepresentation, toPropagate)); return Mono.error(new McpTransportSessionNotFoundException(sessionRepresentation, toPropagate));
} }
@ -425,8 +424,16 @@ public class WebClientStreamableHttpTransport implements McpClientTransport {
return Flux.from(sessionStream.consumeSseStream(idWithMessages)); 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) { 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); && 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;
}
} }