Use MethodInvocationInfo class loader in case of JDK platform loader as well
Closes gh-30210
This commit is contained in:
parent
66cdf43b56
commit
491ae1e3be
|
|
@ -780,7 +780,9 @@ public class MvcUriComponentsBuilder {
|
|||
|
||||
else if (controllerType.isInterface()) {
|
||||
ClassLoader classLoader = controllerType.getClassLoader();
|
||||
if (classLoader == null) { // JDK interface type from bootstrap loader
|
||||
if (classLoader == null || classLoader.getParent() == null) {
|
||||
// JDK interface type from bootstrap loader or platform loader ->
|
||||
// use higher-level loader which can see Spring infrastructure classes
|
||||
classLoader = MethodInvocationInfo.class.getClassLoader();
|
||||
}
|
||||
Class<?>[] ifcs = new Class<?>[] {controllerType, MethodInvocationInfo.class};
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.lang.annotation.ElementType;
|
|||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.sql.Savepoint;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
|
@ -384,14 +385,6 @@ public class MvcUriComponentsBuilderTests {
|
|||
assertThat(uriComponents.encode().toUri().toString()).isEqualTo("http://localhost/hotels/42/bookings/21");
|
||||
}
|
||||
|
||||
@Test // SPR-16710
|
||||
public void fromMethodCallWithCharSequenceReturnType() {
|
||||
UriComponents uriComponents = fromMethodCall(
|
||||
on(BookingControllerWithCharSequence.class).getBooking(21L)).buildAndExpand(42);
|
||||
|
||||
assertThat(uriComponents.encode().toUri().toString()).isEqualTo("http://localhost/hotels/42/bookings/21");
|
||||
}
|
||||
|
||||
@Test // SPR-16710
|
||||
public void fromMethodCallWithStringReturnType() {
|
||||
assertThatIllegalStateException().isThrownBy(() -> {
|
||||
|
|
@ -409,6 +402,22 @@ public class MvcUriComponentsBuilderTests {
|
|||
assertThat(uriComponents.encode().toUri().toString()).isEqualTo("http://localhost/hotels/42/bookings/21");
|
||||
}
|
||||
|
||||
@Test // gh-30210
|
||||
public void fromMethodCallWithCharSequenceReturnType() {
|
||||
UriComponents uriComponents = fromMethodCall(
|
||||
on(BookingControllerWithCharSequence.class).getBooking(21L)).buildAndExpand(42);
|
||||
|
||||
assertThat(uriComponents.encode().toUri().toString()).isEqualTo("http://localhost/hotels/42/bookings/21");
|
||||
}
|
||||
|
||||
@Test // gh-30210
|
||||
public void fromMethodCallWithJdbc30115ReturnType() {
|
||||
UriComponents uriComponents = fromMethodCall(
|
||||
on(BookingControllerWithJdbcSavepoint.class).getBooking(21L)).buildAndExpand(42);
|
||||
|
||||
assertThat(uriComponents.encode().toUri().toString()).isEqualTo("http://localhost/hotels/42/bookings/21");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromMappingNamePlain() {
|
||||
initWebApplicationContext(WebConfig.class);
|
||||
|
|
@ -716,6 +725,17 @@ public class MvcUriComponentsBuilderTests {
|
|||
}
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/hotels/{hotel}")
|
||||
static class BookingControllerWithString {
|
||||
|
||||
@GetMapping("/bookings/{booking}")
|
||||
public String getBooking(@PathVariable Long booking) {
|
||||
return "url";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/hotels/{hotel}")
|
||||
static class BookingControllerWithCharSequence {
|
||||
|
|
@ -729,11 +749,11 @@ public class MvcUriComponentsBuilderTests {
|
|||
|
||||
@Controller
|
||||
@RequestMapping("/hotels/{hotel}")
|
||||
static class BookingControllerWithString {
|
||||
static class BookingControllerWithJdbcSavepoint {
|
||||
|
||||
@GetMapping("/bookings/{booking}")
|
||||
public String getBooking(@PathVariable Long booking) {
|
||||
return "url";
|
||||
public Savepoint getBooking(@PathVariable Long booking) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue