Skip to content

Commit

Permalink
Fix bug where ZipkinRestTemplateBuilderCustomizer had no effect
Browse files Browse the repository at this point in the history
Closes gh-33399
  • Loading branch information
mhalbritter committed Nov 29, 2022
1 parent d88f968 commit 2ceee78
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
Expand Up @@ -80,10 +80,21 @@ ZipkinRestTemplateSender restTemplateSender(ZipkinProperties properties,
ObjectProvider<ZipkinRestTemplateBuilderCustomizer> customizers) {
RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder()
.setConnectTimeout(properties.getConnectTimeout()).setReadTimeout(properties.getReadTimeout());
customizers.orderedStream().forEach((customizer) -> customizer.customize(restTemplateBuilder));
restTemplateBuilder = applyCustomizers(restTemplateBuilder, customizers);
return new ZipkinRestTemplateSender(properties.getEndpoint(), restTemplateBuilder.build());
}

private RestTemplateBuilder applyCustomizers(RestTemplateBuilder restTemplateBuilder,
ObjectProvider<ZipkinRestTemplateBuilderCustomizer> customizers) {
Iterable<ZipkinRestTemplateBuilderCustomizer> orderedCustomizers = () -> customizers.orderedStream()
.iterator();
RestTemplateBuilder currentBuilder = restTemplateBuilder;
for (ZipkinRestTemplateBuilderCustomizer customizer : orderedCustomizers) {
currentBuilder = customizer.customize(currentBuilder);
}
return currentBuilder;
}

}

@Configuration(proxyBeanMethods = false)
Expand Down
Expand Up @@ -31,7 +31,8 @@ public interface ZipkinRestTemplateBuilderCustomizer {
/**
* Customize the rest template builder.
* @param restTemplateBuilder the {@code RestTemplateBuilder} to customize
* @return the customized {@code RestTemplateBuilder}
*/
void customize(RestTemplateBuilder restTemplateBuilder);
RestTemplateBuilder customize(RestTemplateBuilder restTemplateBuilder);

}
Expand Up @@ -27,6 +27,7 @@
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
Expand Down Expand Up @@ -143,8 +144,8 @@ void shouldBackOffOnCustomBeans() {
private static class RestTemplateConfiguration {

@Bean
ZipkinRestTemplateBuilderCustomizer restTemplateBuilder() {
return mock(ZipkinRestTemplateBuilderCustomizer.class);
ZipkinRestTemplateBuilderCustomizer zipkinRestTemplateBuilderCustomizer() {
return new DummyZipkinRestTemplateBuilderCustomizer();
}

}
Expand All @@ -169,4 +170,13 @@ Sender customSender() {

}

private static class DummyZipkinRestTemplateBuilderCustomizer implements ZipkinRestTemplateBuilderCustomizer {

@Override
public RestTemplateBuilder customize(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder;
}

}

}

1 comment on commit 2ceee78

@natrem
Copy link
Contributor

@natrem natrem commented on 2ceee78 Nov 29, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mhalbritter Thanks for the fix.

I think that, in this test, the customizer should actually change the builder instead of returning the same instance. Else I'm pretty sure that the previous code would pass the test.

			return restTemplateBuilder.defaultHeader("dummy", "dummy");

Please sign in to comment.