From 9631db71c4da502a536c787fe13b978aa9950c08 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 18 May 2020 20:09:24 +0200 Subject: [PATCH 1/2] Direct exposure of StringBuilder instead of intermediate String Closes gh-25024 --- .../ServerSentEventHttpMessageReader.java | 20 ++++++++----------- .../ServerSentEventHttpMessageWriter.java | 11 ++++------ 2 files changed, 12 insertions(+), 19 deletions(-) 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 86ee2988bea..c4e372d89bb 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 @@ -47,10 +47,10 @@ import org.springframework.lang.Nullable; */ public class ServerSentEventHttpMessageReader implements HttpMessageReader { - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private static final ResolvableType STRING_TYPE = ResolvableType.forClass(String.class); + private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); + @Nullable private final Decoder decoder; @@ -58,8 +58,6 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader hints) { + private Object decodeData(StringBuilder data, ResolvableType dataType, Map hints) { if (String.class == dataType.resolve()) { return data.substring(0, data.length() - 1); } if (this.decoder == null) { throw new CodecException("No SSE decoder configured and the data is not String."); } - byte[] bytes = data.getBytes(StandardCharsets.UTF_8); + byte[] bytes = data.toString().getBytes(StandardCharsets.UTF_8); DataBuffer buffer = bufferFactory.wrap(bytes); // wrapping only, no allocation return this.decoder.decode(buffer, dataType, MediaType.TEXT_EVENT_STREAM, hints); } @@ -221,7 +219,6 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader Flux encodeEvent(String eventContent, T data, ResolvableType dataType, + private Flux encodeEvent(StringBuilder eventContent, T data, ResolvableType dataType, MediaType mediaType, DataBufferFactory factory, Map hints) { if (this.encoder == null) { @@ -174,16 +174,13 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter Date: Mon, 18 May 2020 20:09:37 +0200 Subject: [PATCH 2/2] Upgrade to AssertJ 3.16.1, Log4J 2.13.3, Vavr 0.10.3, JAMon 2.82, Joda-Time 2.10.6, Caffeine 2.8.3, OkHttp 3.14.9, OpenPDF 1.3.17, HtmlUnit 2.40 --- build.gradle | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 412e1201db7..70fe708e79b 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ configure(allprojects) { project -> mavenBom "org.junit:junit-bom:5.6.2" } dependencies { - dependencySet(group: 'org.apache.logging.log4j', version: '2.13.2') { + dependencySet(group: 'org.apache.logging.log4j', version: '2.13.3') { entry 'log4j-api' entry 'log4j-core' entry 'log4j-slf4j-impl' @@ -87,11 +87,11 @@ configure(allprojects) { project -> dependency "org.yaml:snakeyaml:1.26" dependency "com.h2database:h2:1.4.200" - dependency "com.github.ben-manes.caffeine:caffeine:2.8.1" - dependency "com.github.librepdf:openpdf:1.3.14" + dependency "com.github.ben-manes.caffeine:caffeine:2.8.3" + dependency "com.github.librepdf:openpdf:1.3.17" dependency "com.rometools:rome:1.12.2" dependency "commons-io:commons-io:2.5" - dependency "io.vavr:vavr:0.10.2" + dependency "io.vavr:vavr:0.10.3" dependency "net.sf.jopt-simple:jopt-simple:5.0.4" dependencySet(group: 'org.apache.activemq', version: '5.8.0') { entry 'activemq-broker' @@ -142,7 +142,7 @@ configure(allprojects) { project -> } } - dependencySet(group: 'com.squareup.okhttp3', version: '3.14.7') { + dependencySet(group: 'com.squareup.okhttp3', version: '3.14.9') { entry 'okhttp' entry 'mockwebserver' } @@ -179,7 +179,7 @@ configure(allprojects) { project -> dependency "org.testng:testng:6.14.3" dependency "org.hamcrest:hamcrest:2.1" dependency "org.awaitility:awaitility:3.1.6" - dependency "org.assertj:assertj-core:3.15.0" + dependency "org.assertj:assertj-core:3.16.1" dependencySet(group: 'org.xmlunit', version: '2.6.2') { entry 'xmlunit-assertj' entry('xmlunit-matchers') { @@ -194,10 +194,10 @@ configure(allprojects) { project -> } dependency "io.mockk:mockk:1.10.0" - dependency("net.sourceforge.htmlunit:htmlunit:2.39.1") { + dependency("net.sourceforge.htmlunit:htmlunit:2.40.0") { exclude group: "commons-logging", name: "commons-logging" } - dependency("org.seleniumhq.selenium:htmlunit-driver:2.39.0") { + dependency("org.seleniumhq.selenium:htmlunit-driver:2.40.0") { exclude group: "commons-logging", name: "commons-logging" } dependency("org.seleniumhq.selenium:selenium-java:3.141.59") { @@ -223,8 +223,8 @@ configure(allprojects) { project -> } dependency "com.ibm.websphere:uow:6.0.2.17" - dependency "com.jamonapi:jamon:2.81" - dependency "joda-time:joda-time:2.10.5" + dependency "com.jamonapi:jamon:2.82" + dependency "joda-time:joda-time:2.10.6" dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.6" dependency "org.javamoney:moneta:1.3"