Skip to content

Commit b44ef70

Browse files
committed
Direct reference to PushBuilder API on Servlet 5.0 baseline
See gh-29435
1 parent d1b3107 commit b44ef70

File tree

1 file changed

+9
-38
lines changed

1 file changed

+9
-38
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestMethodArgumentResolver.java

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2020 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,7 +32,6 @@
3232
import org.springframework.core.MethodParameter;
3333
import org.springframework.http.HttpMethod;
3434
import org.springframework.lang.Nullable;
35-
import org.springframework.util.ClassUtils;
3635
import org.springframework.web.bind.support.WebDataBinderFactory;
3736
import org.springframework.web.context.request.NativeWebRequest;
3837
import org.springframework.web.context.request.WebRequest;
@@ -68,29 +67,14 @@
6867
*/
6968
public class ServletRequestMethodArgumentResolver implements HandlerMethodArgumentResolver {
7069

71-
@Nullable
72-
private static Class<?> pushBuilder;
73-
74-
static {
75-
try {
76-
pushBuilder = ClassUtils.forName("jakarta.servlet.http.PushBuilder",
77-
ServletRequestMethodArgumentResolver.class.getClassLoader());
78-
}
79-
catch (ClassNotFoundException ex) {
80-
// Servlet 4.0 PushBuilder not found - not supported for injection
81-
pushBuilder = null;
82-
}
83-
}
84-
85-
8670
@Override
8771
public boolean supportsParameter(MethodParameter parameter) {
8872
Class<?> paramType = parameter.getParameterType();
8973
return (WebRequest.class.isAssignableFrom(paramType) ||
9074
ServletRequest.class.isAssignableFrom(paramType) ||
9175
MultipartRequest.class.isAssignableFrom(paramType) ||
9276
HttpSession.class.isAssignableFrom(paramType) ||
93-
(pushBuilder != null && pushBuilder.isAssignableFrom(paramType)) ||
77+
PushBuilder.class.isAssignableFrom(paramType) ||
9478
(Principal.class.isAssignableFrom(paramType) && !parameter.hasParameterAnnotations()) ||
9579
InputStream.class.isAssignableFrom(paramType) ||
9680
Reader.class.isAssignableFrom(paramType) ||
@@ -143,8 +127,13 @@ private Object resolveArgument(Class<?> paramType, HttpServletRequest request) t
143127
}
144128
return session;
145129
}
146-
else if (pushBuilder != null && pushBuilder.isAssignableFrom(paramType)) {
147-
return PushBuilderDelegate.resolvePushBuilder(request, paramType);
130+
else if (PushBuilder.class.isAssignableFrom(paramType)) {
131+
PushBuilder pushBuilder = request.newPushBuilder();
132+
if (pushBuilder != null && !paramType.isInstance(pushBuilder)) {
133+
throw new IllegalStateException(
134+
"Current push builder is not of type [" + paramType.getName() + "]: " + pushBuilder);
135+
}
136+
return pushBuilder;
148137
}
149138
else if (InputStream.class.isAssignableFrom(paramType)) {
150139
InputStream inputStream = request.getInputStream();
@@ -189,22 +178,4 @@ else if (ZoneId.class == paramType) {
189178
throw new UnsupportedOperationException("Unknown parameter type: " + paramType.getName());
190179
}
191180

192-
193-
/**
194-
* Inner class to avoid a hard dependency on Servlet API 4.0 at runtime.
195-
*/
196-
private static class PushBuilderDelegate {
197-
198-
@Nullable
199-
public static Object resolvePushBuilder(HttpServletRequest request, Class<?> paramType) {
200-
PushBuilder pushBuilder = request.newPushBuilder();
201-
if (pushBuilder != null && !paramType.isInstance(pushBuilder)) {
202-
throw new IllegalStateException(
203-
"Current push builder is not of type [" + paramType.getName() + "]: " + pushBuilder);
204-
}
205-
return pushBuilder;
206-
207-
}
208-
}
209-
210181
}

0 commit comments

Comments
 (0)