diff --git a/spring-context/src/test/java/org/springframework/scripting/support/ResourceScriptSourceTests.java b/spring-context/src/test/java/org/springframework/scripting/support/ResourceScriptSourceTests.java index a5ab6c5a55..9795271cb6 100644 --- a/spring-context/src/test/java/org/springframework/scripting/support/ResourceScriptSourceTests.java +++ b/spring-context/src/test/java/org/springframework/scripting/support/ResourceScriptSourceTests.java @@ -17,12 +17,12 @@ package org.springframework.scripting.support; import java.io.IOException; +import java.io.InputStream; import org.junit.jupiter.api.Test; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; -import org.springframework.util.StreamUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; @@ -60,7 +60,7 @@ public class ResourceScriptSourceTests { // does not support File-based reading; delegates to InputStream-style reading... //resource.getFile(); //mock.setThrowable(new FileNotFoundException()); - given(resource.getInputStream()).willReturn(StreamUtils.emptyInput()); + given(resource.getInputStream()).willReturn(InputStream.nullInputStream()); ResourceScriptSource scriptSource = new ResourceScriptSource(resource); assertThat(scriptSource.isModified()).as("ResourceScriptSource must start off in the 'isModified' state (it obviously isn't).").isTrue(); diff --git a/spring-core/src/main/java/org/springframework/util/StreamUtils.java b/spring-core/src/main/java/org/springframework/util/StreamUtils.java index 62399980d1..a5f296be2a 100644 --- a/spring-core/src/main/java/org/springframework/util/StreamUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StreamUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -216,11 +216,14 @@ public abstract class StreamUtils { Assert.notNull(in, "No InputStream specified"); return (int) in.transferTo(OutputStream.nullOutputStream()); } + /** * Return an efficient empty {@link InputStream}. * @return an InputStream which contains no bytes * @since 4.2.2 + * @deprecated as of 6.0 in favor of {@link InputStream#nullInputStream()} */ + @Deprecated public static InputStream emptyInput() { return InputStream.nullInputStream(); } diff --git a/spring-core/src/main/java/org/springframework/util/xml/StaxUtils.java b/spring-core/src/main/java/org/springframework/util/xml/StaxUtils.java index eeac7ec8a3..3555606de4 100644 --- a/spring-core/src/main/java/org/springframework/util/xml/StaxUtils.java +++ b/spring-core/src/main/java/org/springframework/util/xml/StaxUtils.java @@ -16,6 +16,7 @@ package org.springframework.util.xml; +import java.io.InputStream; import java.util.List; import java.util.function.Supplier; @@ -37,7 +38,6 @@ import org.xml.sax.ContentHandler; import org.xml.sax.XMLReader; import org.springframework.lang.Nullable; -import org.springframework.util.StreamUtils; /** * Convenience methods for working with the StAX API. Partly historic due to JAXP 1.3 @@ -54,7 +54,7 @@ import org.springframework.util.StreamUtils; public abstract class StaxUtils { private static final XMLResolver NO_OP_XML_RESOLVER = - (publicID, systemID, base, ns) -> StreamUtils.emptyInput(); + (publicID, systemID, base, ns) -> InputStream.nullInputStream(); /** diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughBlob.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughBlob.java index 099bd27391..1db65528f8 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughBlob.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughBlob.java @@ -23,7 +23,6 @@ import java.sql.Blob; import java.sql.SQLException; import org.springframework.lang.Nullable; -import org.springframework.util.StreamUtils; /** * Simple JDBC {@link Blob} adapter that exposes a given byte array or binary stream. @@ -65,7 +64,7 @@ class PassThroughBlob implements Blob { return new ByteArrayInputStream(this.content); } else { - return (this.binaryStream != null ? this.binaryStream : StreamUtils.emptyInput()); + return (this.binaryStream != null ? this.binaryStream : InputStream.nullInputStream()); } } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughClob.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughClob.java index b9a27afe92..452d2d4785 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughClob.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/PassThroughClob.java @@ -30,7 +30,6 @@ import java.sql.SQLException; import org.springframework.lang.Nullable; import org.springframework.util.FileCopyUtils; -import org.springframework.util.StreamUtils; /** * Simple JDBC {@link Clob} adapter that exposes a given String or character stream. @@ -84,7 +83,7 @@ class PassThroughClob implements Clob { } else { return new InputStreamReader( - (this.asciiStream != null ? this.asciiStream : StreamUtils.emptyInput()), + (this.asciiStream != null ? this.asciiStream : InputStream.nullInputStream()), StandardCharsets.US_ASCII); } } @@ -100,7 +99,7 @@ class PassThroughClob implements Clob { return new ByteArrayInputStream(tempContent.getBytes(StandardCharsets.US_ASCII)); } else { - return (this.asciiStream != null ? this.asciiStream : StreamUtils.emptyInput()); + return (this.asciiStream != null ? this.asciiStream : InputStream.nullInputStream()); } } catch (IOException ex) { diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 052bee5987..ec6339e841 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -69,7 +69,6 @@ import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; -import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; import org.springframework.web.util.UrlPathHelper; @@ -102,7 +101,7 @@ public class MockHttpServletRequest implements HttpServletRequest { private static final TimeZone GMT = TimeZone.getTimeZone("GMT"); private static final ServletInputStream EMPTY_SERVLET_INPUT_STREAM = - new DelegatingServletInputStream(StreamUtils.emptyInput()); + new DelegatingServletInputStream(InputStream.nullInputStream()); private static final BufferedReader EMPTY_BUFFERED_READER = new BufferedReader(new StringReader("")); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index cc4968472a..f4efb38abb 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -51,7 +51,6 @@ import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; -import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -804,7 +803,7 @@ public class MockHttpServletRequestBuilder HttpInputMessage message = new HttpInputMessage() { @Override public InputStream getBody() { - return (content != null ? new ByteArrayInputStream(content) : StreamUtils.emptyInput()); + return (content != null ? new ByteArrayInputStream(content) : InputStream.nullInputStream()); } @Override public HttpHeaders getHeaders() { diff --git a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpResponse.java index ceec263ff2..2d4108fa09 100644 --- a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpResponse.java @@ -28,7 +28,6 @@ import org.apache.http.util.EntityUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatusCode; import org.springframework.lang.Nullable; -import org.springframework.util.StreamUtils; /** * {@link ClientHttpResponse} implementation based on @@ -84,7 +83,7 @@ final class HttpComponentsClientHttpResponse implements ClientHttpResponse { @Override public InputStream getBody() throws IOException { HttpEntity entity = this.httpResponse.getEntity(); - return (entity != null ? entity.getContent() : StreamUtils.emptyInput()); + return (entity != null ? entity.getContent() : InputStream.nullInputStream()); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/client/OkHttp3ClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/OkHttp3ClientHttpResponse.java index d92bc90980..5d4c376404 100644 --- a/spring-web/src/main/java/org/springframework/http/client/OkHttp3ClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/OkHttp3ClientHttpResponse.java @@ -26,7 +26,6 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatusCode; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.StreamUtils; /** * {@link ClientHttpResponse} implementation based on OkHttp 3.x. @@ -69,7 +68,7 @@ class OkHttp3ClientHttpResponse implements ClientHttpResponse { @Override public InputStream getBody() throws IOException { ResponseBody body = this.response.body(); - return (body != null ? body.byteStream() : StreamUtils.emptyInput()); + return (body != null ? body.byteStream() : InputStream.nullInputStream()); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java index 3301d96027..a2a6c77afe 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java @@ -73,7 +73,7 @@ public class SourceHttpMessageConverter extends AbstractHttpMe (publicId, systemId) -> new InputSource(new StringReader("")); private static final XMLResolver NO_OP_XML_RESOLVER = - (publicID, systemID, base, ns) -> StreamUtils.emptyInput(); + (publicID, systemID, base, ns) -> InputStream.nullInputStream(); private static final Set> SUPPORTED_CLASSES = new HashSet<>(8); diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java index 28727605c6..b2326d4864 100644 --- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java +++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java @@ -18,6 +18,7 @@ package org.springframework.web.client; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.InputStream; import java.net.URI; import java.util.Arrays; import java.util.Collections; @@ -52,7 +53,6 @@ import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.KotlinSerializationJsonHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.util.StreamUtils; import org.springframework.web.util.DefaultUriBuilderFactory; import static org.assertj.core.api.Assertions.assertThat; @@ -284,7 +284,7 @@ class RestTemplateTests { mockSentRequest(GET, "https://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150"); mockResponseStatus(HttpStatus.OK); given(response.getHeaders()).willReturn(new HttpHeaders()); - given(response.getBody()).willReturn(StreamUtils.emptyInput()); + given(response.getBody()).willReturn(InputStream.nullInputStream()); Map uriVariables = new HashMap<>(2); uriVariables.put("hotel", "1"); @@ -440,7 +440,7 @@ class RestTemplateTests { responseHeaders.setContentType(MediaType.TEXT_PLAIN); responseHeaders.setContentLength(10); given(response.getHeaders()).willReturn(responseHeaders); - given(response.getBody()).willReturn(StreamUtils.emptyInput()); + given(response.getBody()).willReturn(InputStream.nullInputStream()); given(converter.read(String.class, response)).willReturn(null); String result = template.postForObject("https://example.com", null, String.class); @@ -460,7 +460,7 @@ class RestTemplateTests { responseHeaders.setContentType(MediaType.TEXT_PLAIN); responseHeaders.setContentLength(10); given(response.getHeaders()).willReturn(responseHeaders); - given(response.getBody()).willReturn(StreamUtils.emptyInput()); + given(response.getBody()).willReturn(InputStream.nullInputStream()); given(converter.read(String.class, response)).willReturn(null); ResponseEntity result = template.postForEntity("https://example.com", null, String.class); @@ -556,7 +556,7 @@ class RestTemplateTests { responseHeaders.setContentType(MediaType.TEXT_PLAIN); responseHeaders.setContentLength(10); given(response.getHeaders()).willReturn(responseHeaders); - given(response.getBody()).willReturn(StreamUtils.emptyInput()); + given(response.getBody()).willReturn(InputStream.nullInputStream()); String result = template.patchForObject("https://example.com", null, String.class); assertThat(result).as("Invalid POST result").isNull(); diff --git a/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java index f2685fcff1..cc384f8340 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/ShallowEtagHeaderFilterTests.java @@ -16,6 +16,7 @@ package org.springframework.web.filter; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import jakarta.servlet.FilterChain; @@ -23,7 +24,6 @@ import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.springframework.util.FileCopyUtils; -import org.springframework.util.StreamUtils; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; import org.springframework.web.testfixture.servlet.MockHttpServletResponse; @@ -45,18 +45,18 @@ public class ShallowEtagHeaderFilterTests { MockHttpServletRequest request = new MockHttpServletRequest("GET", "/hotels"); MockHttpServletResponse response = new MockHttpServletResponse(); - assertThat(filter.isEligibleForEtag(request, response, 200, StreamUtils.emptyInput())).isTrue(); - assertThat(filter.isEligibleForEtag(request, response, 300, StreamUtils.emptyInput())).isFalse(); + assertThat(filter.isEligibleForEtag(request, response, 200, InputStream.nullInputStream())).isTrue(); + assertThat(filter.isEligibleForEtag(request, response, 300, InputStream.nullInputStream())).isFalse(); request = new MockHttpServletRequest("HEAD", "/hotels"); - assertThat(filter.isEligibleForEtag(request, response, 200, StreamUtils.emptyInput())).isFalse(); + assertThat(filter.isEligibleForEtag(request, response, 200, InputStream.nullInputStream())).isFalse(); request = new MockHttpServletRequest("POST", "/hotels"); - assertThat(filter.isEligibleForEtag(request, response, 200, StreamUtils.emptyInput())).isFalse(); + assertThat(filter.isEligibleForEtag(request, response, 200, InputStream.nullInputStream())).isFalse(); request = new MockHttpServletRequest("POST", "/hotels"); request.addHeader("Cache-Control","must-revalidate, no-store"); - assertThat(filter.isEligibleForEtag(request, response, 200, StreamUtils.emptyInput())).isFalse(); + assertThat(filter.isEligibleForEtag(request, response, 200, InputStream.nullInputStream())).isFalse(); } @Test diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java index 1218e2757c..6ccbf589fe 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java @@ -69,7 +69,6 @@ import org.springframework.util.LinkedCaseInsensitiveMap; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; -import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; import org.springframework.web.util.UrlPathHelper; @@ -102,7 +101,7 @@ public class MockHttpServletRequest implements HttpServletRequest { private static final TimeZone GMT = TimeZone.getTimeZone("GMT"); private static final ServletInputStream EMPTY_SERVLET_INPUT_STREAM = - new DelegatingServletInputStream(StreamUtils.emptyInput()); + new DelegatingServletInputStream(InputStream.nullInputStream()); private static final BufferedReader EMPTY_BUFFERED_READER = new BufferedReader(new StringReader("")); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java index 6b726b36d8..16142dab5f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java @@ -48,7 +48,6 @@ import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeTypeUtils; -import org.springframework.util.StreamUtils; import org.springframework.validation.Errors; import org.springframework.validation.annotation.ValidationAnnotationUtils; import org.springframework.web.HttpMediaTypeNotSupportedException; @@ -346,7 +345,7 @@ public abstract class AbstractMessageConverterMethodArgumentResolver implements @Override public InputStream getBody() { - return (this.body != null ? this.body : StreamUtils.emptyInput()); + return (this.body != null ? this.body : InputStream.nullInputStream()); } public boolean hasBody() {