Browse Source

Merge branch '6.2.x'

pull/35641/head
Sam Brannen 2 months ago
parent
commit
ea27415b7b
  1. 2
      spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java
  2. 4
      spring-web/src/main/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolver.java
  3. 24
      spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java

2
spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java

@ -188,7 +188,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager, @@ -188,7 +188,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager,
}
// ignore Microsoft SQLServerException: This operation is not supported.
String msg = ex.getMessage();
if (msg == null || !msg.contains("not supported")) {
if (msg == null || (!msg.contains("not supported") && !msg.contains("3B001"))) {
throw new TransactionSystemException("Could not explicitly release JDBC savepoint", ex);
}
}

4
spring-web/src/main/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolver.java

@ -21,7 +21,7 @@ import java.util.ArrayList; @@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -123,7 +123,7 @@ public class ExceptionHandlerMethodResolver { @@ -123,7 +123,7 @@ public class ExceptionHandlerMethodResolver {
if (exceptions.isEmpty()) {
throw new IllegalStateException("No exception types mapped to " + method);
}
Set<MediaType> mediaTypes = new HashSet<>();
Set<MediaType> mediaTypes = new LinkedHashSet<>();
for (String mediaType : exceptionHandler.produces()) {
try {
mediaTypes.add(MediaType.parseMediaType(mediaType));

24
spring-web/src/test/java/org/springframework/web/method/annotation/ExceptionHandlerMethodResolverTests.java

@ -20,6 +20,7 @@ import java.io.FileNotFoundException; @@ -20,6 +20,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.BindException;
import java.net.SocketException;
import java.util.Set;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@ -100,14 +101,21 @@ class ExceptionHandlerMethodResolverTests { @@ -100,14 +101,21 @@ class ExceptionHandlerMethodResolverTests {
@Test
void shouldThrowExceptionWhenAmbiguousExceptionMapping() {
assertThatIllegalStateException().isThrownBy(() ->
new ExceptionHandlerMethodResolver(AmbiguousController.class));
assertThatIllegalStateException()
.isThrownBy(() -> new ExceptionHandlerMethodResolver(AmbiguousController.class));
}
@Test
void shouldThrowExceptionWhenNoExceptionMapping() {
assertThatIllegalStateException().isThrownBy(() ->
new ExceptionHandlerMethodResolver(NoExceptionController.class));
assertThatIllegalStateException()
.isThrownBy(() -> new ExceptionHandlerMethodResolver(NoExceptionController.class));
}
@Test // gh-35587
void shouldRetainOriginalOrderOfProducibleMediaTypes() {
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(MediaTypeController.class);
Set<MediaType> producibleTypes = resolver.resolveExceptionMapping(new IllegalArgumentException(), MediaType.TEXT_HTML).getProducibleTypes();
assertThat(MediaType.toString(producibleTypes)).isEqualTo("text/html, */*");
}
@Test
@ -131,15 +139,15 @@ class ExceptionHandlerMethodResolverTests { @@ -131,15 +139,15 @@ class ExceptionHandlerMethodResolverTests {
@Test
void shouldThrowExceptionWhenInvalidMediaTypeMapping() {
assertThatIllegalStateException().isThrownBy(() ->
new ExceptionHandlerMethodResolver(InvalidMediaTypeController.class))
assertThatIllegalStateException()
.isThrownBy(() -> new ExceptionHandlerMethodResolver(InvalidMediaTypeController.class))
.withMessageContaining("Invalid media type [invalid-mediatype] declared on @ExceptionHandler");
}
@Test
void shouldThrowExceptionWhenAmbiguousMediaTypeMapping() {
assertThatIllegalStateException().isThrownBy(() ->
new ExceptionHandlerMethodResolver(AmbiguousMediaTypeController.class))
assertThatIllegalStateException()
.isThrownBy(() -> new ExceptionHandlerMethodResolver(AmbiguousMediaTypeController.class))
.withMessageContaining("Ambiguous @ExceptionHandler method mapped for [ExceptionHandler{exceptionType=java.lang.IllegalArgumentException, mediaType=application/json}]")
.withMessageContaining("AmbiguousMediaTypeController.handleJson()")
.withMessageContaining("AmbiguousMediaTypeController.handleJsonToo()");

Loading…
Cancel
Save