Browse Source

Fix BaseCodecConfigurer clone bug

Prior to this commit, ExchangeStrategies custom codec's reader and
writer were not registered due to a bug in BaseCodecConfigurer.

This commit fixes this by correcting the implementation of the
DefaultCustomCodecs constructor used within BaseCodecConfigurer.

Closes gh-25149
pull/25187/head
dlsrb6342 5 years ago committed by Sam Brannen
parent
commit
6c5129b829
  1. 8
      spring-web/src/main/java/org/springframework/http/codec/support/BaseCodecConfigurer.java
  2. 18
      spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java

8
spring-web/src/main/java/org/springframework/http/codec/support/BaseCodecConfigurer.java

@ -142,10 +142,10 @@ abstract class BaseCodecConfigurer implements CodecConfigurer { @@ -142,10 +142,10 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
* @since 5.1.12
*/
DefaultCustomCodecs(DefaultCustomCodecs other) {
other.typedReaders.putAll(this.typedReaders);
other.typedWriters.putAll(this.typedWriters);
other.objectReaders.putAll(this.objectReaders);
other.objectWriters.putAll(this.objectWriters);
this.typedReaders.putAll(other.typedReaders);
this.typedWriters.putAll(other.typedWriters);
this.objectReaders.putAll(other.objectReaders);
this.objectWriters.putAll(other.objectWriters);
}
@Override

18
spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java

@ -273,7 +273,7 @@ public class CodecConfigurerTests { @@ -273,7 +273,7 @@ public class CodecConfigurerTests {
}
@Test
public void cloneCustomCodecs() {
public void cloneEmptyCustomCodecs() {
this.configurer.registerDefaults(false);
CodecConfigurer clone = this.configurer.clone();
@ -288,6 +288,22 @@ public class CodecConfigurerTests { @@ -288,6 +288,22 @@ public class CodecConfigurerTests {
assertEquals(2, clone.getWriters().size());
}
@Test
public void cloneCustomCodecs() {
CodecConfigurer from = new TestCodecConfigurer();
from.registerDefaults(false);
from.customCodecs().register(new Jackson2JsonEncoder());
from.customCodecs().register(new Jackson2JsonDecoder());
from.customCodecs().register(new ServerSentEventHttpMessageReader());
from.customCodecs().register(new ServerSentEventHttpMessageWriter());
CodecConfigurer clone = from.clone();
assertEquals(2, from.getReaders().size());
assertEquals(2, from.getWriters().size());
assertEquals(2, clone.getReaders().size());
assertEquals(2, clone.getWriters().size());
}
@Test
public void cloneDefaultCodecs() {
CodecConfigurer clone = this.configurer.clone();

Loading…
Cancel
Save