Update web services support to use ClientHttpRequestFactoryBuilder

Add a new `WebServiceMessageSenderFactory` factory interface to replace
`HttpWebServiceMessageSenderBuilder`. The factory provides a general
purpose way of creating `WebServiceMessageSender` instances, but most
typically will be `ClientHttpRequestMessageSender` created from a
`ClientHttpRequestFactoryBuilder`.

A new `httpMessageSenderFactory` method has been added to the
`WebServiceTemplateBuilder` class. This allows any sender to be
plugged into the template.

Closes gh-42886
This commit is contained in:
Phillip Webb
2024-10-24 00:04:57 -07:00
parent 022f3cb019
commit 6356e904fc
11 changed files with 342 additions and 81 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,7 +18,8 @@ package org.springframework.boot.docs.io.webservices.template;
import java.time.Duration;
import org.springframework.boot.webservices.client.HttpWebServiceMessageSenderBuilder;
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
import org.springframework.boot.webservices.client.WebServiceMessageSenderFactory;
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -30,13 +31,11 @@ public class MyWebServiceTemplateConfiguration {
@Bean
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
// @formatter:off
WebServiceMessageSender sender = new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2))
.build();
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults()
.withConnectTimeout(Duration.ofSeconds(2))
.withReadTimeout(Duration.ofSeconds(2));
WebServiceMessageSender sender = WebServiceMessageSenderFactory.http(settings).getWebServiceMessageSender();
return builder.messageSenders(sender).build();
// @formatter:on
}
}

View File

@@ -16,7 +16,8 @@
package org.springframework.boot.docs.io.webservices.template
import org.springframework.boot.webservices.client.HttpWebServiceMessageSenderBuilder
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings
import org.springframework.boot.webservices.client.WebServiceMessageSenderFactory
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@@ -28,11 +29,11 @@ class MyWebServiceTemplateConfiguration {
@Bean
fun webServiceTemplate(builder: WebServiceTemplateBuilder): WebServiceTemplate {
val sender = HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2))
.build()
return builder.messageSenders(sender).build()
val settings = ClientHttpRequestFactorySettings.defaults()
.withConnectTimeout(Duration.ofSeconds(2))
.withReadTimeout(Duration.ofSeconds(2));
val sender = WebServiceMessageSenderFactory.http(settings).getWebServiceMessageSender();
return builder.messageSenders(sender).build();
}
}