Browse Source

Use DataBuffer.write in CharSequenceEncoder

Since SPR-17558, `DataBuffer` now offers a new method to write Strings
to them. This commit makes `CharSequenceEncoder` use that.

Issue: SPR-17558
pull/2061/head
Brian Clozel 6 years ago
parent
commit
4955d08f28
  1. 22
      spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java
  2. 2
      spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java

22
spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java

@ -16,9 +16,8 @@ @@ -16,9 +16,8 @@
package org.springframework.core.codec;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CoderMalfunctionError;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@ -28,6 +27,7 @@ import reactor.core.publisher.Flux; @@ -28,6 +27,7 @@ import reactor.core.publisher.Flux;
import org.springframework.core.ResolvableType;
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.log.LogFormatUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.MimeType;
@ -75,9 +75,21 @@ public final class CharSequenceEncoder extends AbstractEncoder<CharSequence> { @@ -75,9 +75,21 @@ public final class CharSequenceEncoder extends AbstractEncoder<CharSequence> {
return Hints.getLogPrefix(hints) + "Writing " + formatted;
});
}
CharBuffer charBuffer = CharBuffer.wrap(charSequence);
ByteBuffer byteBuffer = charset.encode(charBuffer);
return bufferFactory.wrap(byteBuffer);
boolean release = true;
DataBuffer dataBuffer = bufferFactory.allocateBuffer();
try {
dataBuffer.write(charSequence, charset);
release = false;
}
catch (CoderMalfunctionError ex) {
throw new EncodingException("String encoding error: " + ex.getMessage(), ex);
}
finally {
if (release) {
DataBufferUtils.release(dataBuffer);
}
}
return dataBuffer;
});
}

2
spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java

@ -63,8 +63,6 @@ public class CharSequenceEncoderTests @@ -63,8 +63,6 @@ public class CharSequenceEncoderTests
.consumeNextWith(expectString(this.foo))
.consumeNextWith(expectString(this.bar))
.verifyComplete());
}
}

Loading…
Cancel
Save