/** * Creates a new {@code LeakAwareDataBufferFactory} by wrapping a * {@link DefaultDataBufferFactory}. */ public LeakAwareDataBufferFactory() { this(new DefaultDataBufferFactory()); }
@Override public ClientResponse.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 this; }
@Override 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 this; }
public MockServerHttpResponse() { super(new DefaultDataBufferFactory()); this.writeHandler = body -> { this.body = body.cache(); return this.body.then(); }; }
private DataBuffer toDataBuffer(String value) { byte[] bytes = value.getBytes(UTF_8); return new DefaultDataBufferFactory().wrap(bytes); }
@Before public void createBufferFactory() { this.dataBufferFactory = new DefaultDataBufferFactory(); }
private static DataBuffer asDataBuffer(String text) { DefaultDataBuffer buffer = new DefaultDataBufferFactory().allocateBuffer(); return buffer.write(text.getBytes(StandardCharsets.UTF_8)); }
private Flux<DataBuffer> getBody(String body) { return Flux.just(new DefaultDataBufferFactory().wrap(body.getBytes(StandardCharsets.UTF_8))); } }
@Override public Mono<Void> render(@Nullable Map<String, ?> model, @Nullable MediaType mediaType, ServerWebExchange exchange) { ServerHttpResponse response = exchange.getResponse(); if (mediaType != null) { response.getHeaders().setContentType(mediaType); } model = new TreeMap<>(model); String value = this.name + ": " + model.toString(); ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(UTF_8)); DataBuffer dataBuffer = new DefaultDataBufferFactory().wrap(byteBuffer); return response.writeWith(Flux.just(dataBuffer)); } }
@GetMapping("/publisher") public Publisher<ByteBuffer> getPublisher() { DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(); return encoder.encode(Mono.just(new Person("Robert")), dataBufferFactory, ResolvableType.forClass(Person.class), JSON, Collections.emptyMap()).map(DataBuffer::asByteBuffer); }
private ServerHttpRequest createHttpRequest(String uriString) throws Exception { URI uri = URI.create(uriString); MockHttpServletRequest request = new TestHttpServletRequest(uri); AsyncContext asyncContext = new MockAsyncContext(request, new MockHttpServletResponse()); return new ServletServerHttpRequest(request, asyncContext, "", new DefaultDataBufferFactory(), 1024); }
@Override public Mono<Void> handleResult(ServerWebExchange exchange, HandlerResult result) { byte[] bytes = ((String) result.getReturnValue()).getBytes(StandardCharsets.UTF_8); DataBuffer dataBuffer = new DefaultDataBufferFactory().wrap(bytes); return exchange.getResponse().writeWith(Mono.just(dataBuffer)); } }
@Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { return WebHttpHandlerBuilder.webHandler(exchange -> { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); String text = exchange.getAttributes().toString(); DataBuffer buffer = factory.wrap(text.getBytes(StandardCharsets.UTF_8)); return exchange.getResponse().writeWith(Mono.just(buffer)); }); } }
private static Mono<Void> writeToResponse(ServerWebExchange exchange, String value) { byte[] bytes = value.getBytes(StandardCharsets.UTF_8); DataBuffer buffer = new DefaultDataBufferFactory().wrap(bytes); return exchange.getResponse().writeWith(Flux.just(buffer)); }
@Test public void body() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); Flux<DataBuffer> body = Flux.just(dataBuffer); mockTextPlainResponse(body); List<HttpMessageReader<?>> messageReaders = Collections .singletonList(new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes())); when(mockExchangeStrategies.messageReaders()).thenReturn(messageReaders); Mono<String> resultMono = defaultClientResponse.body(toMono(String.class)); assertEquals("foo", resultMono.block()); }
@Test public void setContentLengthForMonoBody() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DataBuffer buffer = factory.wrap("body".getBytes(StandardCharsets.UTF_8)); HttpMessageWriter<String> writer = getWriter(Flux.just(buffer), MimeTypeUtils.TEXT_PLAIN); writer.write(Mono.just("body"), forClass(String.class), TEXT_PLAIN, this.response, NO_HINTS).block(); assertEquals(4, this.response.getHeaders().getContentLength()); }
private ServerHttpRequest generateErrorMultipartRequest() { return MockServerHttpRequest.post("/") .header(CONTENT_TYPE, MULTIPART_FORM_DATA.toString()) .body(Flux.just(new DefaultDataBufferFactory().wrap("invalid content".getBytes()))); }
@SuppressWarnings("unchecked") private void assertStringDecoder(Decoder<?> decoder, boolean textOnly) { assertEquals(StringDecoder.class, decoder.getClass()); assertTrue(decoder.canDecode(forClass(String.class), MimeTypeUtils.TEXT_PLAIN)); assertEquals(!textOnly, decoder.canDecode(forClass(String.class), MediaType.TEXT_EVENT_STREAM)); Flux<String> flux = (Flux<String>) decoder.decode( Flux.just(new DefaultDataBufferFactory().wrap("line1\nline2".getBytes(StandardCharsets.UTF_8))), ResolvableType.forClass(String.class), MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()); assertEquals(Arrays.asList("line1", "line2"), flux.collectList().block(Duration.ZERO)); }
@SuppressWarnings("unchecked") private void assertStringDecoder(Decoder<?> decoder, boolean textOnly) { assertEquals(StringDecoder.class, decoder.getClass()); assertTrue(decoder.canDecode(forClass(String.class), MimeTypeUtils.TEXT_PLAIN)); assertEquals(!textOnly, decoder.canDecode(forClass(String.class), MediaType.TEXT_EVENT_STREAM)); Flux<String> decoded = (Flux<String>) decoder.decode( Flux.just(new DefaultDataBufferFactory().wrap("line1\nline2".getBytes(StandardCharsets.UTF_8))), ResolvableType.forClass(String.class), MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()); assertEquals(Arrays.asList("line1", "line2"), decoded.collectList().block(Duration.ZERO)); }
@Parameterized.Parameters(name = "{0}") public static Object[][] dataBufferFactories() { return new Object[][] { {new NettyDataBufferFactory(new UnpooledByteBufAllocator(true))}, {new NettyDataBufferFactory(new UnpooledByteBufAllocator(false))}, // disable caching for reliable leak detection, see https://github.com/netty/netty/issues/5275 {new NettyDataBufferFactory(new PooledByteBufAllocator(true, 1, 1, 8192, 11, 0, 0, 0, true))}, {new NettyDataBufferFactory(new PooledByteBufAllocator(false, 1, 1, 8192, 11, 0, 0, 0, true))}, {new DefaultDataBufferFactory(true)}, {new DefaultDataBufferFactory(false)} }; }