NettyDataBufferFactory.join returns single-element buffer as-is
Issue: SPR-17560
(cherry picked from commit d5dab12909)
This commit is contained in:
@@ -47,7 +47,7 @@ ext {
|
||||
junitVintageVersion = "4.12.3"
|
||||
kotlinVersion = "1.2.71"
|
||||
log4jVersion = "2.11.1"
|
||||
nettyVersion = "4.1.31.Final" // constrained by StringDecoderTests
|
||||
nettyVersion = "4.1.32.Final"
|
||||
reactorVersion = "Bismuth-SR14"
|
||||
rxjavaVersion = "1.3.8"
|
||||
rxjavaAdapterVersion = "1.2.1"
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -82,22 +83,6 @@ public class NettyDataBufferFactory implements DataBufferFactory {
|
||||
return new NettyDataBuffer(byteBuf, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p>This implementation uses Netty's {@link CompositeByteBuf}.
|
||||
*/
|
||||
@Override
|
||||
public DataBuffer join(List<? extends DataBuffer> dataBuffers) {
|
||||
Assert.notNull(dataBuffers, "'dataBuffers' must not be null");
|
||||
CompositeByteBuf composite = this.byteBufAllocator.compositeBuffer(dataBuffers.size());
|
||||
for (DataBuffer dataBuffer : dataBuffers) {
|
||||
Assert.isInstanceOf(NettyDataBuffer.class, dataBuffer);
|
||||
NettyDataBuffer nettyDataBuffer = (NettyDataBuffer) dataBuffer;
|
||||
composite.addComponent(true, nettyDataBuffer.getNativeBuffer());
|
||||
}
|
||||
return new NettyDataBuffer(composite, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap the given Netty {@link ByteBuf} in a {@code NettyDataBuffer}.
|
||||
* @param byteBuf the Netty byte buffer to wrap
|
||||
@@ -108,11 +93,30 @@ 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.
|
||||
* {@inheritDoc}
|
||||
* <p>This implementation uses Netty's {@link CompositeByteBuf}.
|
||||
*/
|
||||
@Override
|
||||
public DataBuffer join(List<? extends DataBuffer> dataBuffers) {
|
||||
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());
|
||||
}
|
||||
return new NettyDataBuffer(composite, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the given Netty {@link DataBuffer} as a {@link ByteBuf}.
|
||||
* <p>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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user