From b16f6fa4564658615363f9206edf726a492b6083 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 24 Jun 2020 16:12:34 +0100 Subject: [PATCH] Shared static instance of DefaultDataBufferFactory --- .../core/codec/StringDecoder.java | 2 +- .../io/buffer/DefaultDataBufferFactory.java | 9 +++- .../io/buffer/LimitedDataBufferListTests.java | 8 ++- ...stractEncoderMethodReturnValueHandler.java | 7 ++- .../MessageMappingMessageHandlerTests.java | 8 +-- .../PayloadMethodArgumentResolverTests.java | 4 +- .../DefaultRSocketRequesterBuilderTests.java | 2 +- .../rsocket/DefaultRSocketRequesterTests.java | 5 +- .../rsocket/MetadataEncoderTests.java | 2 +- .../messaging/rsocket/PayloadUtilsTests.java | 6 +-- .../init/ResourceDatabasePopulator.java | 2 +- .../r2dbc/connection/init/ScriptUtils.java | 5 +- .../connection/init/ScriptUtilsUnitTests.java | 2 +- .../reactive/MockClientHttpRequest.java | 4 +- .../reactive/MockClientHttpResponse.java | 5 +- .../reactive/MockServerHttpRequest.java | 7 ++- .../reactive/MockServerHttpResponse.java | 2 +- .../web/reactive/server/WiretapConnector.java | 6 +-- .../server/HttpHandlerConnectorTests.java | 2 +- .../reactive/server/MockServerSpecTests.java | 4 +- .../web/reactive/server/MockServerTests.java | 4 +- .../server/samples/bind/WebFilterTests.java | 4 +- .../HttpComponentsClientHttpConnector.java | 2 +- .../reactive/JettyClientHttpConnector.java | 2 +- .../ServerSentEventHttpMessageReader.java | 5 +- .../http/codec/json/Jackson2JsonDecoder.java | 4 +- .../http/codec/multipart/DefaultParts.java | 5 +- .../http/codec/multipart/PartGenerator.java | 11 ++-- .../SynchronossPartHttpMessageReader.java | 10 ++-- .../reactive/ServletHttpHandlerAdapter.java | 4 +- .../reactive/ServletServerHttpRequest.java | 2 +- .../reactive/UndertowHttpHandlerAdapter.java | 4 +- .../reactive/ClientHttpConnectorTests.java | 7 +-- .../codec/EncoderHttpMessageWriterTests.java | 2 +- .../MultipartHttpMessageWriterTests.java | 2 +- .../support/ClientCodecConfigurerTests.java | 3 +- .../support/ServerCodecConfigurerTests.java | 3 +- .../reactive/AsyncIntegrationTests.java | 8 ++- .../RandomHandlerIntegrationTests.java | 7 +-- .../reactive/ServerHttpRequestTests.java | 2 +- .../reactive/ServerHttpResponseTests.java | 4 +- .../adapter/WebHttpHandlerBuilderTests.java | 4 +- .../reactive/MockClientHttpRequest.java | 4 +- .../reactive/MockClientHttpResponse.java | 5 +- .../reactive/MockServerHttpRequest.java | 7 ++- .../reactive/MockServerHttpResponse.java | 2 +- .../client/DefaultClientResponseBuilder.java | 2 +- .../server/DefaultServerRequestBuilder.java | 4 +- .../resource/ContentVersionStrategy.java | 10 ++-- .../socket/client/JettyWebSocketClient.java | 8 ++- .../client/StandardWebSocketClient.java | 8 ++- .../client/UndertowWebSocketClient.java | 7 ++- .../web/reactive/DispatcherHandlerTests.java | 4 +- .../function/BodyExtractorsTests.java | 48 +++++++---------- .../reactive/function/BodyInsertersTests.java | 5 +- .../DefaultClientRequestBuilderTests.java | 4 +- .../DefaultClientResponseBuilderTests.java | 8 +-- .../client/DefaultClientResponseTests.java | 54 ++++++++----------- .../client/ExchangeFilterFunctionsTests.java | 13 +++-- .../client/WebClientIntegrationTests.java | 2 +- .../DefaultServerRequestBuilderTests.java | 6 +-- .../server/DefaultServerRequestTests.java | 45 +++++++--------- .../resource/ResourceWebHandlerTests.java | 7 +-- ...mpleUrlHandlerMappingIntegrationTests.java | 4 +- .../method/InvocableHandlerMethodTests.java | 3 +- ...pingMessageConversionIntegrationTests.java | 4 +- .../ViewResolutionResultHandlerTests.java | 2 +- 67 files changed, 184 insertions(+), 273 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java index 67ecfbe077..aa843eca83 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java @@ -271,7 +271,7 @@ public final class StringDecoder extends AbstractDataBufferDecoder { private static class EndFrameBuffer extends DataBufferWrapper { - private static final DataBuffer BUFFER = new DefaultDataBufferFactory().wrap(new byte[0]); + private static final DataBuffer BUFFER = DefaultDataBufferFactory.sharedInstance.wrap(new byte[0]); private byte[] delimiter; diff --git a/spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBufferFactory.java b/spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBufferFactory.java index b5addd86f3..9da24e5051 100644 --- a/spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBufferFactory.java +++ b/spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBufferFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -38,6 +38,12 @@ public class DefaultDataBufferFactory implements DataBufferFactory { */ public static final int DEFAULT_INITIAL_CAPACITY = 256; + /** + * Shared instance based on the default constructor. + * @since 5.3 + */ + public static final DefaultDataBufferFactory sharedInstance = new DefaultDataBufferFactory(); + private final boolean preferDirect; @@ -46,6 +52,7 @@ public class DefaultDataBufferFactory implements DataBufferFactory { /** * Creates a new {@code DefaultDataBufferFactory} with default settings. + * @see #sharedInstance */ public DefaultDataBufferFactory() { this(false); diff --git a/spring-core/src/test/java/org/springframework/core/io/buffer/LimitedDataBufferListTests.java b/spring-core/src/test/java/org/springframework/core/io/buffer/LimitedDataBufferListTests.java index eeb816fe27..fa650f0125 100644 --- a/spring-core/src/test/java/org/springframework/core/io/buffer/LimitedDataBufferListTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/buffer/LimitedDataBufferListTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -27,9 +27,6 @@ import org.junit.jupiter.api.Test; */ public class LimitedDataBufferListTests { - private final static DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - - @Test void limitEnforced() { Assertions.assertThatThrownBy(() -> new LimitedDataBufferList(5).add(toDataBuffer("123456"))) @@ -51,7 +48,8 @@ public class LimitedDataBufferListTests { private static DataBuffer toDataBuffer(String value) { - return bufferFactory.wrap(value.getBytes(StandardCharsets.UTF_8)); + byte[] bytes = value.getBytes(StandardCharsets.UTF_8); + return DefaultDataBufferFactory.sharedInstance.wrap(bytes); } } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractEncoderMethodReturnValueHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractEncoderMethodReturnValueHandler.java index badd6afc70..e5a8f2f5a3 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractEncoderMethodReturnValueHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractEncoderMethodReturnValueHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -73,8 +73,6 @@ public abstract class AbstractEncoderMethodReturnValueHandler implements Handler private final ReactiveAdapterRegistry adapterRegistry; - private DataBufferFactory defaultBufferFactory = new DefaultDataBufferFactory(); - protected AbstractEncoderMethodReturnValueHandler(List> encoders, ReactiveAdapterRegistry registry) { Assert.notEmpty(encoders, "At least one Encoder is required"); @@ -114,7 +112,8 @@ public abstract class AbstractEncoderMethodReturnValueHandler implements Handler } DataBufferFactory bufferFactory = (DataBufferFactory) message.getHeaders() - .getOrDefault(HandlerMethodReturnValueHandler.DATA_BUFFER_FACTORY_HEADER, this.defaultBufferFactory); + .getOrDefault(HandlerMethodReturnValueHandler.DATA_BUFFER_FACTORY_HEADER, + DefaultDataBufferFactory.sharedInstance); MimeType mimeType = (MimeType) message.getHeaders().get(MessageHeaders.CONTENT_TYPE); Flux encodedContent = encodeContent( diff --git a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/MessageMappingMessageHandlerTests.java b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/MessageMappingMessageHandlerTests.java index 14e6c0f66b..947412ba2c 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/MessageMappingMessageHandlerTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/MessageMappingMessageHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -35,7 +35,6 @@ import org.springframework.core.codec.StringDecoder; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.messaging.Message; import org.springframework.messaging.handler.DestinationPatternsMessageCondition; @@ -60,9 +59,6 @@ import static org.assertj.core.api.Assertions.assertThat; @SuppressWarnings("ALL") public class MessageMappingMessageHandlerTests { - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - - private TestEncoderMethodReturnValueHandler returnValueHandler; @@ -163,7 +159,7 @@ public class MessageMappingMessageHandlerTests { } private DataBuffer toDataBuffer(String payload) { - return bufferFactory.wrap(payload.getBytes(UTF_8)); + return DefaultDataBufferFactory.sharedInstance.wrap(payload.getBytes(UTF_8)); } private void verifyOutputContent(List expected) { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java index 49f68f66c0..58d7200fac 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -154,7 +154,7 @@ public class PayloadMethodArgumentResolverTests { private DataBuffer toDataBuffer(String value) { - return new DefaultDataBufferFactory().wrap(value.getBytes(StandardCharsets.UTF_8)); + return DefaultDataBufferFactory.sharedInstance.wrap(value.getBytes(StandardCharsets.UTF_8)); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java index a622d878ce..d2c1abf153 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java @@ -232,7 +232,7 @@ public class DefaultRSocketRequesterBuilderTests { @Test public void frameDecoderMatchesDataBufferFactory() throws Exception { testPayloadDecoder(new NettyDataBufferFactory(ByteBufAllocator.DEFAULT), PayloadDecoder.ZERO_COPY); - testPayloadDecoder(new DefaultDataBufferFactory(), PayloadDecoder.DEFAULT); + testPayloadDecoder(DefaultDataBufferFactory.sharedInstance, PayloadDecoder.DEFAULT); } private void testPayloadDecoder(DataBufferFactory bufferFactory, PayloadDecoder payloadDecoder) diff --git a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterTests.java index 76649d178b..25a856fd38 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterTests.java @@ -65,8 +65,6 @@ public class DefaultRSocketRequesterTests { private final RSocketStrategies strategies = RSocketStrategies.create(); - private final DefaultDataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - @BeforeEach public void setUp() { @@ -244,7 +242,8 @@ public class DefaultRSocketRequesterTests { } private Payload toPayload(String value) { - return PayloadUtils.createPayload(bufferFactory.wrap(value.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = value.getBytes(StandardCharsets.UTF_8); + return PayloadUtils.createPayload(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/MetadataEncoderTests.java b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/MetadataEncoderTests.java index fe276b5fdb..d2b9445ba1 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/MetadataEncoderTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/MetadataEncoderTests.java @@ -203,7 +203,7 @@ public class MetadataEncoderTests { @Test public void defaultDataBufferFactory() { - DefaultDataBufferFactory bufferFactory = new DefaultDataBufferFactory(); + DefaultDataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance; RSocketStrategies strategies = RSocketStrategies.builder().dataBufferFactory(bufferFactory).build(); DataBuffer buffer = new MetadataEncoder(COMPOSITE_METADATA, strategies) diff --git a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/PayloadUtilsTests.java b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/PayloadUtilsTests.java index 343a267770..73b1d45779 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/PayloadUtilsTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/PayloadUtilsTests.java @@ -44,8 +44,6 @@ public class PayloadUtilsTests { private LeakAwareNettyDataBufferFactory nettyBufferFactory = new LeakAwareNettyDataBufferFactory(PooledByteBufAllocator.DEFAULT); - private DefaultDataBufferFactory defaultBufferFactory = new DefaultDataBufferFactory(); - @AfterEach public void tearDown() throws Exception { @@ -70,7 +68,7 @@ public class PayloadUtilsTests { @Test public void retainAndReleaseWithDefaultFactory() { Payload payload = ByteBufPayload.create("sample data"); - DataBuffer buffer = PayloadUtils.retainDataAndReleasePayload(payload, this.defaultBufferFactory); + DataBuffer buffer = PayloadUtils.retainDataAndReleasePayload(payload, DefaultDataBufferFactory.sharedInstance); assertThat(buffer).isInstanceOf(DefaultDataBuffer.class); assertThat(payload.refCnt()).isEqualTo(0); @@ -163,7 +161,7 @@ public class PayloadUtilsTests { } private DefaultDataBuffer createDefaultDataBuffer(String content) { - DefaultDataBuffer buffer = this.defaultBufferFactory.allocateBuffer(); + DefaultDataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(); buffer.write(content, StandardCharsets.UTF_8); return buffer; } diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ResourceDatabasePopulator.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ResourceDatabasePopulator.java index 9e545e6dfe..a6aeac3136 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ResourceDatabasePopulator.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ResourceDatabasePopulator.java @@ -74,7 +74,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator { private boolean ignoreFailedDrops = false; - private DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); + private DataBufferFactory dataBufferFactory = DefaultDataBufferFactory.sharedInstance; /** diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java index fb7788c964..b34274b40d 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java @@ -512,8 +512,9 @@ public abstract class ScriptUtils { * @see org.springframework.r2dbc.connection.ConnectionFactoryUtils#releaseConnection */ public static Mono executeSqlScript(Connection connection, EncodedResource resource) throws ScriptException { - return executeSqlScript(connection, resource, new DefaultDataBufferFactory(), false, false, DEFAULT_COMMENT_PREFIX, - DEFAULT_STATEMENT_SEPARATOR, DEFAULT_BLOCK_COMMENT_START_DELIMITER, DEFAULT_BLOCK_COMMENT_END_DELIMITER); + return executeSqlScript(connection, resource, DefaultDataBufferFactory.sharedInstance, false, false, + DEFAULT_COMMENT_PREFIX, DEFAULT_STATEMENT_SEPARATOR, DEFAULT_BLOCK_COMMENT_START_DELIMITER, + DEFAULT_BLOCK_COMMENT_END_DELIMITER); } /** diff --git a/spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java b/spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java index b72814de70..79c14178d4 100644 --- a/spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java +++ b/spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java @@ -213,7 +213,7 @@ public class ScriptUtilsUnitTests { private String readScript(String path) { EncodedResource resource = new EncodedResource( new ClassPathResource(path, getClass())); - return ScriptUtils.readScript(resource, new DefaultDataBufferFactory()).block(); + return ScriptUtils.readScript(resource, DefaultDataBufferFactory.sharedInstance).block(); } } diff --git a/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpRequest.java b/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpRequest.java index c6568c1fca..13daae032c 100644 --- a/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpRequest.java @@ -52,8 +52,6 @@ public class MockClientHttpRequest extends AbstractClientHttpRequest { private final URI url; - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private Flux body = Flux.error( new IllegalStateException("The body is not set. " + "Did handling complete with success? Is a custom \"writeHandler\" configured?")); @@ -103,7 +101,7 @@ public class MockClientHttpRequest extends AbstractClientHttpRequest { @Override public DataBufferFactory bufferFactory() { - return this.bufferFactory; + return DefaultDataBufferFactory.sharedInstance; } @Override diff --git a/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpResponse.java b/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpResponse.java index 4e3d1a76ad..8c58484808 100644 --- a/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/http/client/reactive/MockClientHttpResponse.java @@ -26,7 +26,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; @@ -55,8 +54,6 @@ public class MockClientHttpResponse implements ClientHttpResponse { private Flux body = Flux.empty(); - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - public MockClientHttpResponse(HttpStatus status) { Assert.notNull(status, "HttpStatus is required"); @@ -109,7 +106,7 @@ public class MockClientHttpResponse implements ClientHttpResponse { private DataBuffer toDataBuffer(String body, Charset charset) { byte[] bytes = body.getBytes(charset); ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); - return this.bufferFactory.wrap(byteBuffer); + return DefaultDataBufferFactory.sharedInstance.wrap(byteBuffer); } @Override diff --git a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java index f107b9477a..29b39931af 100644 --- a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java @@ -30,7 +30,6 @@ import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpCookie; import org.springframework.http.HttpHeaders; @@ -428,8 +427,6 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { private static class DefaultBodyBuilder implements BodyBuilder { - private static final DataBufferFactory BUFFER_FACTORY = new DefaultDataBufferFactory(); - private final String methodValue; private final URI url; @@ -579,7 +576,9 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { @Override public MockServerHttpRequest body(String body) { - return body(Flux.just(BUFFER_FACTORY.wrap(body.getBytes(getCharset())))); + byte[] bytes = body.getBytes(getCharset()); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.wrap(bytes); + return body(Flux.just(buffer)); } private Charset getCharset() { diff --git a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpResponse.java b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpResponse.java index af068c8a90..6281bf6cc6 100644 --- a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpResponse.java @@ -57,7 +57,7 @@ public class MockServerHttpResponse extends AbstractServerHttpResponse { public MockServerHttpResponse() { - this(new DefaultDataBufferFactory()); + this(DefaultDataBufferFactory.sharedInstance); } public MockServerHttpResponse(DataBufferFactory dataBufferFactory) { diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/WiretapConnector.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/WiretapConnector.java index b4f3ed6df5..47b035e23f 100644 --- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/WiretapConnector.java +++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/WiretapConnector.java @@ -29,7 +29,6 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.MonoProcessor; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpMethod; import org.springframework.http.client.reactive.ClientHttpConnector; @@ -125,16 +124,13 @@ class WiretapConnector implements ClientHttpConnector { */ final static class WiretapRecorder { - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - - @Nullable private final Flux publisher; @Nullable private final Flux> publisherNested; - private final DataBuffer buffer = bufferFactory.allocateBuffer(); + private final DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(); private final MonoProcessor content = MonoProcessor.create(); diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/HttpHandlerConnectorTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/HttpHandlerConnectorTests.java index d9670a4f64..92965fb209 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/HttpHandlerConnectorTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/HttpHandlerConnectorTests.java @@ -121,7 +121,7 @@ public class HttpHandlerConnectorTests { } private DataBuffer toDataBuffer(String body) { - return new DefaultDataBufferFactory().wrap(body.getBytes(UTF_8)); + return DefaultDataBufferFactory.sharedInstance.wrap(body.getBytes(UTF_8)); } diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerSpecTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerSpecTests.java index b16e7b62ac..1e47439fb9 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerSpecTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerSpecTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -88,7 +88,7 @@ public class MockServerSpecTests { @Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { return WebHttpHandlerBuilder.webHandler(exchange -> { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); + DefaultDataBufferFactory factory = DefaultDataBufferFactory.sharedInstance; String text = exchange.getAttributes().toString(); DataBuffer buffer = factory.wrap(text.getBytes(StandardCharsets.UTF_8)); return exchange.getResponse().writeWith(Mono.just(buffer)); diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerTests.java index 37353fdefd..2b42028b2b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/MockServerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -161,7 +161,7 @@ public class MockServerTests { private DataBuffer toDataBuffer(String value) { byte[] bytes = value.getBytes(UTF_8); - return new DefaultDataBufferFactory().wrap(bytes); + return DefaultDataBufferFactory.sharedInstance.wrap(bytes); } } diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/WebFilterTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/WebFilterTests.java index 24e760ed6c..586494208f 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/WebFilterTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/WebFilterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2020 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. @@ -36,7 +36,7 @@ public class WebFilterTests { public void testWebFilter() throws Exception { WebFilter filter = (exchange, chain) -> { - DataBuffer buffer = new DefaultDataBufferFactory().allocateBuffer(); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(); buffer.write("It works!".getBytes(StandardCharsets.UTF_8)); return exchange.getResponse().writeWith(Mono.just(buffer)); }; diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpConnector.java b/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpConnector.java index f090eb5ce9..a9f9e4952a 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpConnector.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpConnector.java @@ -54,7 +54,7 @@ public class HttpComponentsClientHttpConnector implements ClientHttpConnector { private final BiFunction contextProvider; - private DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); + private DataBufferFactory dataBufferFactory = DefaultDataBufferFactory.sharedInstance; /** diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpConnector.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpConnector.java index a45ca47902..85f57da5ce 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpConnector.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpConnector.java @@ -43,7 +43,7 @@ public class JettyClientHttpConnector implements ClientHttpConnector { private final HttpClient httpClient; - private DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); + private DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance; /** diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java index c4e372d89b..849d0879cc 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java @@ -30,7 +30,6 @@ import org.springframework.core.codec.CodecException; import org.springframework.core.codec.Decoder; import org.springframework.core.codec.StringDecoder; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferLimitException; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.MediaType; @@ -49,8 +48,6 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader decoder; @@ -194,7 +191,7 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader decoded = STRING_DECODER.decode(input, STRING_TYPE, textMimeType, null); - DataBufferFactory factory = new DefaultDataBufferFactory(); - return decoded.map(s -> factory.wrap(s.getBytes(StandardCharsets.UTF_8))); + return decoded.map(s -> DefaultDataBufferFactory.sharedInstance.wrap(s.getBytes(StandardCharsets.UTF_8))); } } diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/DefaultParts.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/DefaultParts.java index 4d12b3f051..77044db0a8 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/DefaultParts.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/DefaultParts.java @@ -22,7 +22,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.ContentDisposition; @@ -107,8 +106,6 @@ abstract class DefaultParts { private final String value; - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - public DefaultFormFieldPart(HttpHeaders headers, String value) { super(headers); this.value = value; @@ -118,7 +115,7 @@ abstract class DefaultParts { public Flux content() { return Flux.defer(() -> { byte[] bytes = this.value.getBytes(MultipartUtils.charset(headers())); - return Flux.just(this.bufferFactory.wrap(bytes)); + return Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); }); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java index 33b4064f7c..5ac8b72457 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java @@ -44,7 +44,6 @@ import reactor.core.scheduler.Scheduler; import org.springframework.core.codec.DecodingException; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferLimitException; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; @@ -61,8 +60,6 @@ import org.springframework.util.FastByteArrayOutputStream; */ final class PartGenerator extends BaseSubscriber { - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private static final Log logger = LogFactory.getLog(PartGenerator.class); private final AtomicReference state = new AtomicReference<>(new InitialState()); @@ -513,7 +510,7 @@ final class PartGenerator extends BaseSubscriber { DataBufferUtils.release(buffer); } this.content.clear(); - Flux content = Flux.just(bufferFactory.wrap(bytes)); + Flux content = Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); emitPart(DefaultParts.part(this.headers, content)); } @@ -678,8 +675,10 @@ final class PartGenerator extends BaseSubscriber { } private Flux partContent() { - return DataBufferUtils.readByteChannel(() -> Files.newByteChannel(this.file, StandardOpenOption.READ), - bufferFactory, 1024) + return DataBufferUtils + .readByteChannel( + () -> Files.newByteChannel(this.file, StandardOpenOption.READ), + DefaultDataBufferFactory.sharedInstance, 1024) .subscribeOn(PartGenerator.this.blockingOperationScheduler); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java index 30dce891b4..6cdf3e5141 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java @@ -49,7 +49,6 @@ import org.springframework.core.ResolvableType; import org.springframework.core.codec.DecodingException; import org.springframework.core.codec.Hints; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferLimitException; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; @@ -79,10 +78,6 @@ import org.springframework.util.Assert; */ public class SynchronossPartHttpMessageReader extends LoggingCodecSupport implements HttpMessageReader { - // Static DataBufferFactory to copy from FileInputStream or wrap bytes[]. - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - - private int maxInMemorySize = 256 * 1024; private long maxDiskUsagePerPart = -1; @@ -441,7 +436,8 @@ public class SynchronossPartHttpMessageReader extends LoggingCodecSupport implem @Override public Flux content() { - return DataBufferUtils.readInputStream(getStorage()::getInputStream, bufferFactory, 4096); + return DataBufferUtils.readInputStream( + getStorage()::getInputStream, DefaultDataBufferFactory.sharedInstance, 4096); } protected StreamStorage getStorage() { @@ -530,7 +526,7 @@ public class SynchronossPartHttpMessageReader extends LoggingCodecSupport implem @Override public Flux content() { byte[] bytes = this.content.getBytes(getCharset()); - return Flux.just(bufferFactory.wrap(bytes)); + return Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); } private Charset getCharset() { diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java index 078c5f762c..750b4fc7d9 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -71,7 +71,7 @@ public class ServletHttpHandlerAdapter implements Servlet { @Nullable private String servletPath; - private DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(false); + private DataBufferFactory dataBufferFactory = DefaultDataBufferFactory.sharedInstance; public ServletHttpHandlerAdapter(HttpHandler httpHandler) { diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java index 5e5672ba82..693255b61b 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java @@ -60,7 +60,7 @@ import org.springframework.util.StringUtils; */ class ServletServerHttpRequest extends AbstractServerHttpRequest { - static final DataBuffer EOF_BUFFER = new DefaultDataBufferFactory().allocateBuffer(0); + static final DataBuffer EOF_BUFFER = DefaultDataBufferFactory.sharedInstance.allocateBuffer(0); private final HttpServletRequest request; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java index 49867f2b01..3364a95493 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -45,7 +45,7 @@ public class UndertowHttpHandlerAdapter implements io.undertow.server.HttpHandle private final HttpHandler httpHandler; - private DataBufferFactory bufferFactory = new DefaultDataBufferFactory(false); + private DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance; public UndertowHttpHandlerAdapter(HttpHandler httpHandler) { diff --git a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java index 19621e0e68..3c3debef97 100644 --- a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java +++ b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java @@ -45,7 +45,6 @@ import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpMethod; @@ -68,8 +67,6 @@ public class ClientHttpConnectorTests { private final MockWebServer server = new MockWebServer(); - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - @BeforeEach void startServer() throws IOException { server.start(); @@ -102,7 +99,7 @@ public class ClientHttpConnectorTests { if (requestHasBody) { Mono body = Mono.fromCallable(() -> { byte[] bytes = requestBody.getBytes(StandardCharsets.UTF_8); - return this.bufferFactory.wrap(bytes); + return DefaultDataBufferFactory.sharedInstance.wrap(bytes); }); return request.writeWith(body); } @@ -228,7 +225,7 @@ public class ClientHttpConnectorTests { private Mono stringBuffer(String value) { return Mono.fromCallable(() -> { byte[] bytes = value.getBytes(StandardCharsets.UTF_8); - DataBuffer buffer = this.bufferFactory.allocateBuffer(bytes.length); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(bytes.length); buffer.write(bytes); return buffer; }); diff --git a/spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java b/spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java index 162c8ecfa5..39269ce69d 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/EncoderHttpMessageWriterTests.java @@ -155,7 +155,7 @@ class EncoderHttpMessageWriterTests { @Test void setContentLengthForMonoBody() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); + DefaultDataBufferFactory factory = DefaultDataBufferFactory.sharedInstance; DataBuffer buffer = factory.wrap("body".getBytes(StandardCharsets.UTF_8)); configureEncoder(Flux.just(buffer), MimeTypeUtils.TEXT_PLAIN); HttpMessageWriter writer = new EncoderHttpMessageWriter<>(this.encoder); diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java index 6f5e5cc488..f91a4462cc 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java @@ -251,7 +251,7 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests { @Test // SPR-16376 public void customContentDisposition() throws IOException { Resource logo = new ClassPathResource("/org/springframework/http/converter/logo.jpg"); - Flux buffers = DataBufferUtils.read(logo, new DefaultDataBufferFactory(), 1024); + Flux buffers = DataBufferUtils.read(logo, DefaultDataBufferFactory.sharedInstance, 1024); long contentLength = logo.contentLength(); MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder(); diff --git a/spring-web/src/test/java/org/springframework/http/codec/support/ClientCodecConfigurerTests.java b/spring-web/src/test/java/org/springframework/http/codec/support/ClientCodecConfigurerTests.java index 3fef68f472..bf4446facb 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/support/ClientCodecConfigurerTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/support/ClientCodecConfigurerTests.java @@ -242,8 +242,9 @@ public class ClientCodecConfigurerTests { Object expected = !textOnly; assertThat(decoder.canDecode(forClass(String.class), MediaType.TEXT_EVENT_STREAM)).isEqualTo(expected); + byte[] bytes = "line1\nline2".getBytes(StandardCharsets.UTF_8); Flux decoded = (Flux) decoder.decode( - Flux.just(new DefaultDataBufferFactory().wrap("line1\nline2".getBytes(StandardCharsets.UTF_8))), + Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)), ResolvableType.forClass(String.class), MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()); assertThat(decoded.collectList().block(Duration.ZERO)).isEqualTo(Arrays.asList("line1", "line2")); diff --git a/spring-web/src/test/java/org/springframework/http/codec/support/ServerCodecConfigurerTests.java b/spring-web/src/test/java/org/springframework/http/codec/support/ServerCodecConfigurerTests.java index b6e90691ee..16b7fe57d5 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/support/ServerCodecConfigurerTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/support/ServerCodecConfigurerTests.java @@ -266,8 +266,9 @@ public class ServerCodecConfigurerTests { Object expected = !textOnly; assertThat(decoder.canDecode(forClass(String.class), MediaType.TEXT_EVENT_STREAM)).isEqualTo(expected); + byte[] bytes = "line1\nline2".getBytes(StandardCharsets.UTF_8); Flux flux = (Flux) decoder.decode( - Flux.just(new DefaultDataBufferFactory().wrap("line1\nline2".getBytes(StandardCharsets.UTF_8))), + Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)), ResolvableType.forClass(String.class), MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()); assertThat(flux.collectList().block(Duration.ZERO)).isEqualTo(Arrays.asList("line1", "line2")); diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java index 44d757b61c..224bc1c418 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -24,7 +24,6 @@ import reactor.core.publisher.Mono; import reactor.core.scheduler.Scheduler; import reactor.core.scheduler.Schedulers; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; @@ -42,8 +41,6 @@ class AsyncIntegrationTests extends AbstractHttpHandlerIntegrationTests { private final Scheduler asyncGroup = Schedulers.parallel(); - private final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - @Override protected AsyncHandler createHttpHandler() { @@ -68,7 +65,8 @@ class AsyncIntegrationTests extends AbstractHttpHandlerIntegrationTests { return response.writeWith(Flux.just("h", "e", "l", "l", "o") .delayElements(Duration.ofMillis(100)) .publishOn(asyncGroup) - .collect(dataBufferFactory::allocateBuffer, (buffer, str) -> buffer.write(str.getBytes()))); + .collect(DefaultDataBufferFactory.sharedInstance::allocateBuffer, + (buffer, str) -> buffer.write(str.getBytes()))); } } diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java index 7cbc1089c8..56658924f5 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-20 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. @@ -24,7 +24,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; @@ -47,8 +46,6 @@ class RandomHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests private final RandomHandler handler = new RandomHandler(); - private final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - @Override protected RandomHandler createHttpHandler() { @@ -105,7 +102,7 @@ class RandomHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests private DataBuffer randomBuffer(int size) { byte[] bytes = new byte[size]; rnd.nextBytes(bytes); - DataBuffer buffer = dataBufferFactory.allocateBuffer(size); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(size); buffer.write(bytes); return buffer; } diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java index 455e6a7078..024ebf8115 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestTests.java @@ -198,7 +198,7 @@ public class ServerHttpRequestTests { MockHttpServletRequest request = new TestHttpServletRequest(uri); request.setContextPath(contextPath); AsyncContext asyncContext = new MockAsyncContext(request, new MockHttpServletResponse()); - return new ServletServerHttpRequest(request, asyncContext, "", new DefaultDataBufferFactory(), 1024); + return new ServletServerHttpRequest(request, asyncContext, "", DefaultDataBufferFactory.sharedInstance, 1024); } private static class TestHttpServletRequest extends MockHttpServletRequest { diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpResponseTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpResponseTests.java index cdb4225381..431ec473ae 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpResponseTests.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpResponseTests.java @@ -178,7 +178,7 @@ public class ServerHttpResponseTests { private DefaultDataBuffer wrap(String a) { - return new DefaultDataBufferFactory().wrap(ByteBuffer.wrap(a.getBytes(StandardCharsets.UTF_8))); + return DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(a.getBytes(StandardCharsets.UTF_8))); } @@ -193,7 +193,7 @@ public class ServerHttpResponseTests { private final List body = new ArrayList<>(); public TestServerHttpResponse() { - super(new DefaultDataBufferFactory()); + super(DefaultDataBufferFactory.sharedInstance); } @Override diff --git a/spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java b/spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java index d753b6c8d4..4f3bebc11e 100644 --- a/spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -117,7 +117,7 @@ public class WebHttpHandlerBuilderTests { private static Mono writeToResponse(ServerWebExchange exchange, String value) { byte[] bytes = value.getBytes(StandardCharsets.UTF_8); - DataBuffer buffer = new DefaultDataBufferFactory().wrap(bytes); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.wrap(bytes); return exchange.getResponse().writeWith(Flux.just(buffer)); } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpRequest.java index f21c01c195..a73d6a2ed6 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpRequest.java @@ -53,8 +53,6 @@ public class MockClientHttpRequest extends AbstractClientHttpRequest implements private final URI url; - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private Flux body = Flux.error( new IllegalStateException("The body is not set. " + "Did handling complete with success? Is a custom \"writeHandler\" configured?")); @@ -109,7 +107,7 @@ public class MockClientHttpRequest extends AbstractClientHttpRequest implements @Override public DataBufferFactory bufferFactory() { - return this.bufferFactory; + return DefaultDataBufferFactory.sharedInstance; } @Override diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpResponse.java index e5f014e871..27098aba69 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/reactive/MockClientHttpResponse.java @@ -26,7 +26,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; @@ -55,8 +54,6 @@ public class MockClientHttpResponse implements ClientHttpResponse { private Flux body = Flux.empty(); - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - public MockClientHttpResponse(HttpStatus status) { Assert.notNull(status, "HttpStatus is required"); @@ -109,7 +106,7 @@ public class MockClientHttpResponse implements ClientHttpResponse { private DataBuffer toDataBuffer(String body, Charset charset) { byte[] bytes = body.getBytes(charset); ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); - return this.bufferFactory.wrap(byteBuffer); + return DefaultDataBufferFactory.sharedInstance.wrap(byteBuffer); } @Override diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpRequest.java index 36ba6b0459..b3ed7ea547 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpRequest.java @@ -30,7 +30,6 @@ import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpCookie; import org.springframework.http.HttpHeaders; @@ -428,8 +427,6 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { private static class DefaultBodyBuilder implements BodyBuilder { - private static final DataBufferFactory BUFFER_FACTORY = new DefaultDataBufferFactory(); - private final String methodValue; private final URI url; @@ -579,7 +576,9 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest { @Override public MockServerHttpRequest body(String body) { - return body(Flux.just(BUFFER_FACTORY.wrap(body.getBytes(getCharset())))); + byte[] bytes = body.getBytes(getCharset()); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.wrap(bytes); + return body(Flux.just(buffer)); } private Charset getCharset() { diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpResponse.java index b3f95854e4..14ae615f10 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/MockServerHttpResponse.java @@ -57,7 +57,7 @@ public class MockServerHttpResponse extends AbstractServerHttpResponse { public MockServerHttpResponse() { - this(new DefaultDataBufferFactory()); + this(DefaultDataBufferFactory.sharedInstance); } public MockServerHttpResponse(DataBufferFactory dataBufferFactory) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java index ceb97b91be..055a1d9ed5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilder.java @@ -186,7 +186,7 @@ final class DefaultClientResponseBuilder implements ClientResponse.Builder { this.body = Flux.just(body). map(s -> { byte[] bytes = body.getBytes(StandardCharsets.UTF_8); - return new DefaultDataBufferFactory().wrap(bytes); + return DefaultDataBufferFactory.sharedInstance.wrap(bytes); }); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilder.java index 794dab654a..940118866f 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilder.java @@ -36,7 +36,6 @@ import org.springframework.context.i18n.LocaleContext; import org.springframework.core.ResolvableType; import org.springframework.core.codec.Hints; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpCookie; @@ -151,11 +150,10 @@ class DefaultServerRequestBuilder implements ServerRequest.Builder { public ServerRequest.Builder body(String body) { Assert.notNull(body, "Body must not be null"); releaseBody(); - DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); this.body = Flux.just(body). map(s -> { byte[] bytes = body.getBytes(StandardCharsets.UTF_8); - return dataBufferFactory.wrap(bytes); + return DefaultDataBufferFactory.sharedInstance.wrap(bytes); }); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ContentVersionStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ContentVersionStrategy.java index 823cc19fda..80fceb3eda 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ContentVersionStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ContentVersionStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -21,7 +21,6 @@ import reactor.core.publisher.Mono; import org.springframework.core.io.Resource; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.util.DigestUtils; @@ -39,13 +38,12 @@ import org.springframework.util.StreamUtils; */ public class ContentVersionStrategy extends AbstractFileNameVersionStrategy { - private static final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - @Override public Mono getResourceVersion(Resource resource) { - Flux flux = - DataBufferUtils.read(resource, dataBufferFactory, StreamUtils.BUFFER_SIZE); + Flux flux = DataBufferUtils.read( + resource, DefaultDataBufferFactory.sharedInstance, StreamUtils.BUFFER_SIZE); + return DataBufferUtils.join(flux) .map(buffer -> { byte[] result = new byte[buffer.readableByteCount()]; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java index 65a44d5933..691551736b 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/JettyWebSocketClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -29,7 +29,6 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.MonoProcessor; import org.springframework.context.Lifecycle; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; import org.springframework.web.reactive.socket.HandshakeInfo; @@ -59,8 +58,6 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { private final boolean externallyManaged; - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - /** * Default constructor that creates and manages an instance of a Jetty @@ -157,7 +154,8 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle { private Object createHandler(URI url, WebSocketHandler handler, MonoProcessor completion) { return new JettyWebSocketHandlerAdapter(handler, session -> { HandshakeInfo info = createHandshakeInfo(url, session); - return new JettyWebSocketSession(session, info, this.bufferFactory, completion); + return new JettyWebSocketSession( + session, info, DefaultDataBufferFactory.sharedInstance, completion); }); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java index baffed71ea..41bbc7697c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/StandardWebSocketClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 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. @@ -55,8 +55,6 @@ public class StandardWebSocketClient implements WebSocketClient { private static final Log logger = LogFactory.getLog(StandardWebSocketClient.class); - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private final WebSocketContainer webSocketContainer; @@ -129,7 +127,7 @@ public class StandardWebSocketClient implements WebSocketClient { protected StandardWebSocketSession createWebSocketSession(Session session, HandshakeInfo info, MonoProcessor completion) { - return new StandardWebSocketSession(session, info, this.bufferFactory, completion); + return new StandardWebSocketSession(session, info, DefaultDataBufferFactory.sharedInstance, completion); } private ClientEndpointConfig createEndpointConfig(Configurator configurator, List subProtocols) { @@ -140,7 +138,7 @@ public class StandardWebSocketClient implements WebSocketClient { } protected DataBufferFactory bufferFactory() { - return this.bufferFactory; + return DefaultDataBufferFactory.sharedInstance; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/UndertowWebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/UndertowWebSocketClient.java index ec418a7296..7b3cbe50e0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/UndertowWebSocketClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/UndertowWebSocketClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -65,8 +65,6 @@ public class UndertowWebSocketClient implements WebSocketClient { private final Consumer builderConsumer; - private final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - /** * Constructor with the {@link XnioWorker} to pass to @@ -198,7 +196,8 @@ public class UndertowWebSocketClient implements WebSocketClient { DefaultNegotiation negotiation, WebSocketChannel channel) { HandshakeInfo info = createHandshakeInfo(url, negotiation); - UndertowWebSocketSession session = new UndertowWebSocketSession(channel, info, this.bufferFactory, completion); + DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance; + UndertowWebSocketSession session = new UndertowWebSocketSession(channel, info, bufferFactory, completion); UndertowWebSocketHandlerAdapter adapter = new UndertowWebSocketHandlerAdapter(session); channel.getReceiveSetter().set(adapter); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerTests.java index 992990f6dc..637f102be3 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -102,7 +102,7 @@ public class DispatcherHandlerTests { @Override public Mono handleResult(ServerWebExchange exchange, HandlerResult result) { byte[] bytes = ((String) result.getReturnValue()).getBytes(StandardCharsets.UTF_8); - DataBuffer dataBuffer = new DefaultDataBufferFactory().wrap(bytes); + DataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(bytes); return exchange.getResponse().writeWith(Mono.just(dataBuffer)); } } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java index 55aa6302ff..bf1e58c2e5 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -119,7 +119,7 @@ public class BodyExtractorsTests { public void toMono() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(String.class); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); + DefaultDataBufferFactory factory = DefaultDataBufferFactory.sharedInstance; DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); Flux body = Flux.just(dataBuffer); @@ -138,9 +138,8 @@ public class BodyExtractorsTests { BodyExtractor>, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(new ParameterizedTypeReference>() {}); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("{\"username\":\"foo\",\"password\":\"bar\"}".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "{\"username\":\"foo\",\"password\":\"bar\"}".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/").contentType(MediaType.APPLICATION_JSON).body(body); @@ -160,9 +159,8 @@ public class BodyExtractorsTests { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(User.class); this.hints.put(JSON_VIEW_HINT, SafeToDeserialize.class); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("{\"username\":\"foo\",\"password\":\"bar\"}".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "{\"username\":\"foo\",\"password\":\"bar\"}".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -193,9 +191,8 @@ public class BodyExtractorsTests { @Test public void toMonoVoidAsClientShouldConsumeAndCancel() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); TestPublisher body = TestPublisher.create(); BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(Void.class); @@ -232,9 +229,8 @@ public class BodyExtractorsTests { public void toFlux() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(String.class); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/").body(body); @@ -251,9 +247,9 @@ public class BodyExtractorsTests { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(User.class); this.hints.put(JSON_VIEW_HINT, SafeToDeserialize.class); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); String text = "[{\"username\":\"foo\",\"password\":\"bar\"},{\"username\":\"bar\",\"password\":\"baz\"}]"; - DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap(text.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = text.getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -279,9 +275,8 @@ public class BodyExtractorsTests { public void toFluxUnacceptable() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(String.class); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -313,9 +308,8 @@ public class BodyExtractorsTests { @Test public void toFormData() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - String text = "name+1=value+1&name+2=value+2%2B1&name+2=value+2%2B2&name+3"; - DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap(text.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "name+1=value+1&name+2=value+2%2B1&name+2=value+2%2B2&name+3".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -360,9 +354,8 @@ public class BodyExtractorsTests { "\r\n" + "-----------------------------9051914041544843365972754266--\r\n"; - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap(bodyContents.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = bodyContents.getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -403,9 +396,8 @@ public class BodyExtractorsTests { public void toDataBuffers() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toDataBuffers(); - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); MockServerHttpRequest request = MockServerHttpRequest.post("/").body(body); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyInsertersTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyInsertersTests.java index d0b8c1502c..71124300d9 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyInsertersTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyInsertersTests.java @@ -421,9 +421,8 @@ public class BodyInsertersTests { @Test public void ofDataBuffers() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); BodyInserter, ReactiveHttpOutputMessage> inserter = BodyInserters.fromDataBuffers(body); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilderTests.java index c9bef9b638..a5dc6c316f 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -118,7 +118,7 @@ public class DefaultClientRequestBuilderTests { BodyInserter inserter = (response, strategies) -> { byte[] bodyBytes = body.getBytes(UTF_8); - DataBuffer buffer = new DefaultDataBufferFactory().wrap(bodyBytes); + DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.wrap(bodyBytes); return response.writeWith(Mono.just(buffer)); }; diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java index 04c2849ccc..31e336c719 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseBuilderTests.java @@ -23,7 +23,6 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -41,14 +40,11 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ public class DefaultClientResponseBuilderTests { - private final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - - @Test public void normal() { Flux body = Flux.just("baz") .map(s -> s.getBytes(StandardCharsets.UTF_8)) - .map(dataBufferFactory::wrap); + .map(DefaultDataBufferFactory.sharedInstance::wrap); ClientResponse response = ClientResponse.create(HttpStatus.BAD_GATEWAY, ExchangeStrategies.withDefaults()) .header("foo", "bar") @@ -71,7 +67,7 @@ public class DefaultClientResponseBuilderTests { public void mutate() { Flux otherBody = Flux.just("foo", "bar") .map(s -> s.getBytes(StandardCharsets.UTF_8)) - .map(dataBufferFactory::wrap); + .map(DefaultDataBufferFactory.sharedInstance::wrap); HttpRequest mockClientHttpRequest = new MockClientHttpRequest(HttpMethod.GET, "/path"); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseTests.java index 5fe2940400..0b21511fea 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultClientResponseTests.java @@ -125,9 +125,8 @@ public class DefaultClientResponseTests { @Test public void body() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -141,9 +140,8 @@ public class DefaultClientResponseTests { @Test public void bodyToMono() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -157,9 +155,8 @@ public class DefaultClientResponseTests { @Test public void bodyToMonoTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -175,9 +172,8 @@ public class DefaultClientResponseTests { @Test public void bodyToFlux() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -192,9 +188,8 @@ public class DefaultClientResponseTests { @Test public void bodyToFluxTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -211,9 +206,8 @@ public class DefaultClientResponseTests { @Test public void toEntity() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -230,9 +224,8 @@ public class DefaultClientResponseTests { @Test public void toEntityWithUnknownStatusCode() throws Exception { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer - = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); httpHeaders.setContentType(MediaType.TEXT_PLAIN); @@ -255,9 +248,8 @@ public class DefaultClientResponseTests { @Test public void toEntityTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -276,9 +268,8 @@ public class DefaultClientResponseTests { @Test public void toEntityList() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); @@ -295,9 +286,8 @@ public class DefaultClientResponseTests { @Test public void toEntityListWithUnknownStatusCode() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); httpHeaders.setContentType(MediaType.TEXT_PLAIN); @@ -320,8 +310,8 @@ public class DefaultClientResponseTests { @Test public void toEntityListTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); mockTextPlainResponse(body); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/ExchangeFilterFunctionsTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/ExchangeFilterFunctionsTests.java index 1c8d7910bc..1a776ae843 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/ExchangeFilterFunctionsTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/ExchangeFilterFunctionsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -197,10 +197,9 @@ public class ExchangeFilterFunctionsTests { @Test public void limitResponseSize() { - DefaultDataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - DataBuffer b1 = dataBuffer("foo", bufferFactory); - DataBuffer b2 = dataBuffer("bar", bufferFactory); - DataBuffer b3 = dataBuffer("baz", bufferFactory); + DataBuffer b1 = dataBuffer("foo"); + DataBuffer b2 = dataBuffer("bar"); + DataBuffer b3 = dataBuffer("baz"); ClientRequest request = ClientRequest.create(HttpMethod.GET, DEFAULT_URL).build(); ClientResponse response = ClientResponse.create(HttpStatus.OK).body(Flux.just(b1, b2, b3)).build(); @@ -222,8 +221,8 @@ public class ExchangeFilterFunctionsTests { return value; } - private DataBuffer dataBuffer(String foo, DefaultDataBufferFactory bufferFactory) { - return bufferFactory.wrap(foo.getBytes(StandardCharsets.UTF_8)); + private DataBuffer dataBuffer(String foo) { + return DefaultDataBufferFactory.sharedInstance.wrap(foo.getBytes(StandardCharsets.UTF_8)); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java index 347be47f53..508fa8df93 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java @@ -627,7 +627,7 @@ class WebClientIntegrationTests { prepareResponse(response -> {}); Resource resource = new ClassPathResource("largeTextFile.txt", getClass()); - Flux body = DataBufferUtils.read(resource, new DefaultDataBufferFactory(), 4096); + Flux body = DataBufferUtils.read(resource, DefaultDataBufferFactory.sharedInstance, 4096); Mono result = this.webClient.post() .uri("/") diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilderTests.java index 1b2506d20b..6c312c0f57 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestBuilderTests.java @@ -23,7 +23,6 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseCookie; @@ -42,9 +41,6 @@ import static org.assertj.core.api.Assertions.entry; */ public class DefaultServerRequestBuilderTests { - private final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); - - @Test public void from() { MockServerHttpRequest request = MockServerHttpRequest.post("https://example.com") @@ -58,7 +54,7 @@ public class DefaultServerRequestBuilderTests { Flux body = Flux.just("baz") .map(s -> s.getBytes(StandardCharsets.UTF_8)) - .map(dataBufferFactory::wrap); + .map(DefaultDataBufferFactory.sharedInstance::wrap); ServerRequest result = ServerRequest.from(other) .method(HttpMethod.HEAD) diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java index 7c1d65cfd8..d195f1f12f 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java @@ -239,9 +239,8 @@ public class DefaultServerRequestTests { @Test public void body() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -259,9 +258,8 @@ public class DefaultServerRequestTests { @Test public void bodyToMono() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -278,9 +276,8 @@ public class DefaultServerRequestTests { @Test public void bodyToMonoParameterizedTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -298,9 +295,8 @@ public class DefaultServerRequestTests { @Test public void bodyToMonoDecodingException() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("{\"invalid\":\"json\" ".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "{\"invalid\":\"json\" ".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -320,9 +316,8 @@ public class DefaultServerRequestTests { @Test public void bodyToFlux() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -339,9 +334,8 @@ public class DefaultServerRequestTests { @Test public void bodyToFluxParameterizedTypeReference() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -359,9 +353,8 @@ public class DefaultServerRequestTests { @Test public void bodyUnacceptable() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -380,9 +373,8 @@ public class DefaultServerRequestTests { @Test public void formData() { - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap("foo=bar&baz=qux".getBytes(StandardCharsets.UTF_8))); + byte[] bytes = "foo=bar&baz=qux".getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); @@ -414,9 +406,8 @@ public class DefaultServerRequestTests { "\r\n" + "qux\r\n" + "--12345--\r\n"; - DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); - DefaultDataBuffer dataBuffer = - factory.wrap(ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = data.getBytes(StandardCharsets.UTF_8); + DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java index ac96e74ae3..1b3f9a2cdf 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java @@ -35,7 +35,6 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.CacheControl; @@ -71,12 +70,8 @@ public class ResourceWebHandlerTests { private static final Duration TIMEOUT = Duration.ofSeconds(1); - private ResourceWebHandler handler; - private DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - - @BeforeEach public void setup() throws Exception { List locations = new ArrayList<>(2); @@ -596,7 +591,7 @@ public class ResourceWebHandlerTests { String boundary = "--" + exchange.getResponse().getHeaders().getContentType().toString().substring(30); Mono reduced = Flux.from(exchange.getResponse().getBody()) - .reduce(this.bufferFactory.allocateBuffer(), (previous, current) -> { + .reduce(DefaultDataBufferFactory.sharedInstance.allocateBuffer(), (previous, current) -> { previous.write(current); DataBufferUtils.release(current); return previous; diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java index 7d869abdb5..07c6692606 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -117,7 +117,7 @@ class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandlerIntegra } private static DataBuffer asDataBuffer(String text) { - DefaultDataBuffer buffer = new DefaultDataBufferFactory().allocateBuffer(); + DefaultDataBuffer buffer = DefaultDataBufferFactory.sharedInstance.allocateBuffer(); return buffer.write(text.getBytes(StandardCharsets.UTF_8)); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/InvocableHandlerMethodTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/InvocableHandlerMethodTests.java index ca4a4c7d88..cb2042827b 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/InvocableHandlerMethodTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/InvocableHandlerMethodTests.java @@ -292,7 +292,8 @@ public class InvocableHandlerMethodTests { } private Flux getBody(String body) { - return Flux.just(new DefaultDataBufferFactory().wrap(body.getBytes(StandardCharsets.UTF_8))); + byte[] bytes = body.getBytes(StandardCharsets.UTF_8); + return Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes)); } } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java index 5faed552a5..5472eca8f6 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestMappingMessageConversionIntegrationTests.java @@ -44,7 +44,6 @@ import org.springframework.core.ResolvableType; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.buffer.DataBuffer; -import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -487,9 +486,8 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq @GetMapping("/publisher") public Publisher getPublisher() { - DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(); - return encoder.encode(Mono.just(new Person("Robert")), dataBufferFactory, + return encoder.encode(Mono.just(new Person("Robert")), DefaultDataBufferFactory.sharedInstance, ResolvableType.forClass(Person.class), JSON, Collections.emptyMap()).map(DataBuffer::asByteBuffer); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java index 3c8e368ac4..04b2963666 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java @@ -398,7 +398,7 @@ public class ViewResolutionResultHandlerTests { model = new TreeMap<>(model); String value = this.name + ": " + model.toString(); ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(UTF_8)); - DataBuffer dataBuffer = new DefaultDataBufferFactory().wrap(byteBuffer); + DataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(byteBuffer); return response.writeWith(Flux.just(dataBuffer)); } }