Browse Source

Prevent default WebServiceMessageFactory to be created

This commit improves the builder to provide the message factory upfront
rather than setting it after the WebServiceTemplate has been
instantiated.

By providing the factory upfront (if it is set), it prevents the
default strategy to be created first to be then erased by the custom
factory.

Closes gh-48615
pull/48617/head
Stéphane Nicoll 3 months ago
parent
commit
54fc77b51f
  1. 3
      module/spring-boot-webservices/src/main/java/org/springframework/boot/webservices/client/WebServiceTemplateBuilder.java
  2. 7
      module/spring-boot-webservices/src/test/java/org/springframework/boot/webservices/client/WebServiceTemplateBuilderTests.java

3
module/spring-boot-webservices/src/main/java/org/springframework/boot/webservices/client/WebServiceTemplateBuilder.java

@ -454,7 +454,8 @@ public class WebServiceTemplateBuilder { @@ -454,7 +454,8 @@ public class WebServiceTemplateBuilder {
* @see #configure(WebServiceTemplate)
*/
public WebServiceTemplate build() {
return configure(new WebServiceTemplate());
return configure(
(this.messageFactory != null) ? new WebServiceTemplate(this.messageFactory) : new WebServiceTemplate());
}
/**

7
module/spring-boot-webservices/src/test/java/org/springframework/boot/webservices/client/WebServiceTemplateBuilderTests.java

@ -38,6 +38,7 @@ import org.springframework.ws.client.core.FaultMessageResolver; @@ -38,6 +38,7 @@ import org.springframework.ws.client.core.FaultMessageResolver;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.client.support.destination.DestinationProvider;
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
import org.springframework.ws.transport.WebServiceMessageSender;
import org.springframework.ws.transport.http.ClientHttpRequestMessageSender;
import org.springframework.ws.transport.http.HttpUrlConnectionMessageSender;
@ -318,6 +319,12 @@ class WebServiceTemplateBuilderTests { @@ -318,6 +319,12 @@ class WebServiceTemplateBuilderTests {
then(template).should().setTransformerFactoryClass(SAXTransformerFactory.class);
}
@Test
void buildShouldDetectWebServiceMessageFactory() {
WebServiceTemplate webServiceTemplate = this.builder.build();
assertThat(webServiceTemplate.getMessageFactory()).isInstanceOf(SaajSoapMessageFactory.class);
}
@Test
void setWebServiceMessageFactory() {
WebServiceMessageFactory messageFactory = mock(WebServiceMessageFactory.class);

Loading…
Cancel
Save