From 8a57997d2106641f48ec3760b966e5721491e63a Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 2 May 2019 16:32:47 +0200 Subject: [PATCH] Avoid use of Objects.requireNonNull plus related polishing --- .../DefaultEntityResponseBuilder.java | 86 ++++++------------- 1 file changed, 27 insertions(+), 59 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java index 2c06431eb0a..3cb493f064a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java @@ -24,7 +24,6 @@ import java.time.ZonedDateTime; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.concurrent.CompletionStage; import java.util.function.Consumer; @@ -67,7 +66,9 @@ import org.springframework.web.servlet.ModelAndView; */ final class DefaultEntityResponseBuilder implements EntityResponse.Builder { - private static final boolean reactiveStreamsPresent; + private static final boolean reactiveStreamsPresent = ClassUtils.isPresent( + "org.reactivestreams.Publisher", DefaultEntityResponseBuilder.class.getClassLoader()); + private final T entity; @@ -79,11 +80,6 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder private final MultiValueMap cookies = new LinkedMultiValueMap<>(); - static { - ClassLoader classLoader = DefaultEntityResponseBuilder.class.getClassLoader(); - reactiveStreamsPresent = ClassUtils.isPresent("org.reactivestreams.Publisher", classLoader); - } - private DefaultEntityResponseBuilder(T entity, @Nullable Type entityType) { this.entity = entity; @@ -205,15 +201,12 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder return new CompletionStageEntityResponse(this.status, this.headers, this.cookies, completionStage, this.entityType); } - else if (reactiveStreamsPresent && - PublisherEntityResponse.isPublisher(this.entity)) { + else if (reactiveStreamsPresent && PublisherEntityResponse.isPublisher(this.entity)) { Publisher publisher = (Publisher) this.entity; - return new PublisherEntityResponse(this.status, this.headers, this.cookies, publisher, - this.entityType); + return new PublisherEntityResponse(this.status, this.headers, this.cookies, publisher, this.entityType); } else { - return new DefaultEntityResponse<>(this.status, this.headers, this.cookies, this.entity, - this.entityType); + return new DefaultEntityResponse<>(this.status, this.headers, this.cookies, this.entity, this.entityType); } } @@ -232,18 +225,17 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder return new DefaultEntityResponseBuilder<>(t, bodyType.getType()); } + /** * Default {@link EntityResponse} implementation for synchronous bodies. */ - private static class DefaultEntityResponse - extends DefaultServerResponseBuilder.AbstractServerResponse + private static class DefaultEntityResponse extends DefaultServerResponseBuilder.AbstractServerResponse implements EntityResponse { private final T entity; private final Type entityType; - public DefaultEntityResponse(int statusCode, HttpHeaders headers, MultiValueMap cookies, T entity, Type entityType) { @@ -263,18 +255,15 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder throws ServletException, IOException { writeEntityWithMessageConverters(this.entity, servletRequest,servletResponse, context); - return null; } @SuppressWarnings("unchecked") - protected void writeEntityWithMessageConverters(Object entity, - HttpServletRequest request, HttpServletResponse response, - ServerResponse.Context context) + protected void writeEntityWithMessageConverters(Object entity, HttpServletRequest request, + HttpServletResponse response, ServerResponse.Context context) throws ServletException, IOException { ServletServerHttpResponse serverResponse = new ServletServerHttpResponse(response); - MediaType contentType = getContentType(response); Class entityClass = entity.getClass(); @@ -307,9 +296,8 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder } } - protected void tryWriteEntityWithMessageConverters(Object entity, - HttpServletRequest request, HttpServletResponse response, - ServerResponse.Context context) { + protected void tryWriteEntityWithMessageConverters(Object entity, HttpServletRequest request, + HttpServletResponse response, ServerResponse.Context context) { try { writeEntityWithMessageConverters(entity, request, response, context); } @@ -334,12 +322,11 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder /** * {@link EntityResponse} implementation for asynchronous {@link CompletionStage} bodies. */ - private static class CompletionStageEntityResponse - extends DefaultEntityResponse> { + private static class CompletionStageEntityResponse extends DefaultEntityResponse> { public CompletionStageEntityResponse(int statusCode, HttpHeaders headers, - MultiValueMap cookies, CompletionStage entity, - Type entityType) { + MultiValueMap cookies, CompletionStage entity, Type entityType) { + super(statusCode, headers, cookies, entity, entityType); } @@ -348,7 +335,6 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder HttpServletResponse servletResponse, Context context) { AsyncContext asyncContext = servletRequest.startAsync(servletRequest, servletResponse); - entity().whenComplete((entity, throwable) -> { try { if (entity != null) { @@ -370,11 +356,12 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder } } + private static class PublisherEntityResponse extends DefaultEntityResponse> { public PublisherEntityResponse(int statusCode, HttpHeaders headers, - MultiValueMap cookies, Publisher entity, - Type entityType) { + MultiValueMap cookies, Publisher entity, Type entityType) { + super(statusCode, headers, cookies, entity, entityType); } @@ -384,14 +371,12 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder AsyncContext asyncContext = servletRequest.startAsync(servletRequest, new NoContentLengthResponseWrapper(servletResponse)); - entity().subscribe(new ProducingSubscriber(asyncContext, context)); - return null; } - public static boolean isPublisher(Object o) { - return (o instanceof Publisher); + public static boolean isPublisher(Object entity) { + return (entity instanceof Publisher); } @@ -405,16 +390,13 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder @Nullable private Subscription subscription; - public ProducingSubscriber(AsyncContext asyncContext, - Context context) { + public ProducingSubscriber(AsyncContext asyncContext, Context context) { this.asyncContext = asyncContext; this.context = context; } @Override public void onSubscribe(Subscription s) { - Objects.requireNonNull(s); - if (this.subscription == null) { this.subscription = s; this.subscription.request(Long.MAX_VALUE); @@ -426,27 +408,15 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder @Override public void onNext(T element) { - Objects.requireNonNull(element); - HttpServletRequest servletRequest = - (HttpServletRequest) this.asyncContext.getRequest(); - HttpServletResponse servletResponse = - (HttpServletResponse) this.asyncContext.getResponse(); - - tryWriteEntityWithMessageConverters(element, - servletRequest, - servletResponse, - this.context); + HttpServletRequest servletRequest = (HttpServletRequest) this.asyncContext.getRequest(); + HttpServletResponse servletResponse = (HttpServletResponse) this.asyncContext.getResponse(); + tryWriteEntityWithMessageConverters(element, servletRequest, servletResponse, this.context); } @Override public void onError(Throwable t) { - Objects.requireNonNull(t); - - handleError(t, - (HttpServletRequest) this.asyncContext.getRequest(), - (HttpServletResponse) this.asyncContext.getResponse(), - this.context); - + handleError(t, (HttpServletRequest) this.asyncContext.getRequest(), + (HttpServletResponse) this.asyncContext.getResponse(), this.context); this.asyncContext.complete(); } @@ -454,9 +424,9 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder public void onComplete() { this.asyncContext.complete(); } - } + private static class NoContentLengthResponseWrapper extends HttpServletResponseWrapper { public NoContentLengthResponseWrapper(HttpServletResponse response) { @@ -485,8 +455,6 @@ final class DefaultEntityResponseBuilder implements EntityResponse.Builder public void setContentLengthLong(long len) { } } - } - }