Skip to content

Commit 3a11e41

Browse files
author
jiangteng
committed
Fix issue#1371
1 parent b6e3cca commit 3a11e41

1 file changed

Lines changed: 15 additions & 10 deletions

File tree

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpMessageConverters.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class FeignHttpMessageConverters {
3636

3737
private final ObjectProvider<HttpMessageConverterCustomizer> cloudCustomizers;
3838

39-
private List<HttpMessageConverter<?>> converters;
39+
private volatile List<HttpMessageConverter<?>> converters;
4040

4141
public FeignHttpMessageConverters(ObjectProvider<ClientHttpMessageConvertersCustomizer> customizers,
4242
ObjectProvider<HttpMessageConverterCustomizer> cloudCustomizers) {
@@ -51,16 +51,21 @@ public List<HttpMessageConverter<?>> getConverters() {
5151

5252
private void initConvertersIfRequired() {
5353
if (this.converters == null) {
54-
this.converters = new ArrayList<>();
55-
HttpMessageConverters.ClientBuilder builder = HttpMessageConverters.forClient();
56-
// TODO: allow disabling of registerDefaults
57-
builder.registerDefaults();
58-
// TODO: check if already added? Howto order?
54+
synchronized (this) {
55+
if (this.converters == null) {
56+
List<HttpMessageConverter<?>> newConverters = new ArrayList<>();
57+
HttpMessageConverters.ClientBuilder builder = HttpMessageConverters.forClient();
58+
// TODO: allow disabling of registerDefaults
59+
builder.registerDefaults();
60+
// TODO: check if already added? Howto order?
5961

60-
this.customizers.orderedStream().forEach(customizer -> customizer.customize(builder));
61-
HttpMessageConverters hmc = builder.build();
62-
hmc.forEach(converter -> converters.add(converter));
63-
cloudCustomizers.forEach(customizer -> customizer.accept(this.converters));
62+
this.customizers.orderedStream().forEach(customizer -> customizer.customize(builder));
63+
HttpMessageConverters hmc = builder.build();
64+
hmc.forEach(converter -> newConverters.add(converter));
65+
cloudCustomizers.forEach(customizer -> customizer.accept(newConverters));
66+
this.converters = newConverters;
67+
}
68+
}
6469
}
6570
}
6671

0 commit comments

Comments
 (0)