From d5dab129097f98ed3148473422eb706c20fd10c9 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 3 Dec 2018 23:52:35 +0100 Subject: [PATCH] NettyDataBufferFactory.join returns single-element buffer as-is Issue: SPR-17560 --- .../io/buffer/NettyDataBufferFactory.java | 21 ++++++++++++------- .../server/samples/bind/HttpServerTests.java | 12 +++++------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBufferFactory.java b/spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBufferFactory.java index f91be4eea93..10272d8db7b 100644 --- a/spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBufferFactory.java +++ b/spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBufferFactory.java @@ -31,6 +31,7 @@ import org.springframework.util.Assert; * Netty {@link ByteBufAllocator}. * * @author Arjen Poutsma + * @author Juergen Hoeller * @since 5.0 * @see io.netty.buffer.PooledByteBufAllocator * @see io.netty.buffer.UnpooledByteBufAllocator @@ -47,7 +48,7 @@ public class NettyDataBufferFactory implements DataBufferFactory { * @see io.netty.buffer.UnpooledByteBufAllocator */ public NettyDataBufferFactory(ByteBufAllocator byteBufAllocator) { - Assert.notNull(byteBufAllocator, "'byteBufAllocator' must not be null"); + Assert.notNull(byteBufAllocator, "ByteBufAllocator must not be null"); this.byteBufAllocator = byteBufAllocator; } @@ -97,8 +98,12 @@ public class NettyDataBufferFactory implements DataBufferFactory { */ @Override public DataBuffer join(List dataBuffers) { - Assert.notNull(dataBuffers, "'dataBuffers' must not be null"); - CompositeByteBuf composite = this.byteBufAllocator.compositeBuffer(dataBuffers.size()); + Assert.notEmpty(dataBuffers, "DataBuffer List must not be empty"); + int bufferCount = dataBuffers.size(); + if (bufferCount == 1) { + return dataBuffers.get(0); + } + CompositeByteBuf composite = this.byteBufAllocator.compositeBuffer(bufferCount); for (DataBuffer dataBuffer : dataBuffers) { Assert.isInstanceOf(NettyDataBuffer.class, dataBuffer); composite.addComponent(true, ((NettyDataBuffer) dataBuffer).getNativeBuffer()); @@ -107,11 +112,11 @@ public class NettyDataBufferFactory implements DataBufferFactory { } /** - * Return the given Netty {@link DataBuffer} as a {@link ByteBuf}. Returns the - * {@linkplain NettyDataBuffer#getNativeBuffer() native buffer} if {@code buffer} is - * a {@link NettyDataBuffer}; returns {@link Unpooled#wrappedBuffer(ByteBuffer)} - * otherwise. - * @param buffer the {@code DataBuffer} to return a {@code ByteBuf} for. + * Return the given Netty {@link DataBuffer} as a {@link ByteBuf}. + *

Returns the {@linkplain NettyDataBuffer#getNativeBuffer() native buffer} + * if {@code buffer} is a {@link NettyDataBuffer}; returns + * {@link Unpooled#wrappedBuffer(ByteBuffer)} otherwise. + * @param buffer the {@code DataBuffer} to return a {@code ByteBuf} for * @return the netty {@code ByteBuf} */ public static ByteBuf toByteBuf(DataBuffer buffer) { diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/HttpServerTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/HttpServerTests.java index a389bf647e3..821c462f3d1 100644 --- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/HttpServerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/bind/HttpServerTests.java @@ -26,8 +26,8 @@ import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.web.reactive.function.server.RouterFunctions; import org.springframework.web.reactive.function.server.ServerResponse; -import static org.springframework.web.reactive.function.server.RequestPredicates.GET; -import static org.springframework.web.reactive.function.server.RouterFunctions.route; +import static org.springframework.web.reactive.function.server.RequestPredicates.*; +import static org.springframework.web.reactive.function.server.RouterFunctions.*; /** * Sample tests demonstrating live server integration tests. @@ -43,11 +43,9 @@ public class HttpServerTests { @Before - public void setUp() throws Exception { - + public void start() throws Exception { HttpHandler httpHandler = RouterFunctions.toHttpHandler( - route(GET("/test"), request -> - ServerResponse.ok().syncBody("It works!"))); + route(GET("/test"), request -> ServerResponse.ok().syncBody("It works!"))); this.server = new ReactorHttpServer(); this.server.setHandler(httpHandler); @@ -60,7 +58,7 @@ public class HttpServerTests { } @After - public void tearDown() { + public void stop() { this.server.stop(); }