48. 使用 WebServiceTemplate 调用 Web 服务

如果需要从应用程序调用远程 Web 服务,则可以使用WebServiceTemplate类。由于WebServiceTemplate实例在使用前通常需要自定义,因此 Spring Boot 不提供任何单个自动配置的WebServiceTemplate bean。但是,它会自动配置WebServiceTemplateBuilder,可以在需要时创建WebServiceTemplate实例。

以下代码显示了一个典型示例:

@Service
public class MyService {

	private final WebServiceTemplate webServiceTemplate;

	public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) {
		this.webServiceTemplate = webServiceTemplateBuilder.build();
	}

	public DetailsResp someWsCall(DetailsReq detailsReq) {
		 return (DetailsResp) this.webServiceTemplate.marshalSendAndReceive(detailsReq, new SoapActionCallback(ACTION));

	}

}

默认情况下,WebServiceTemplateBuilder使用 Classpath 上可用的 HTTP Client 端库检测合适的基于 HTTP 的WebServiceMessageSender。您还可以如下自定义读取和连接超时:

@Bean
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
	return builder.messageSenders(new HttpWebServiceMessageSenderBuilder()
			.setConnectTimeout(5000).setReadTimeout(2000).build()).build();
}