47、Web Service

Spring Boot 提供 Web Service 自动配置,因此您要做的就是定义 Endpoints

可以使用 spring-boot-starter-webservices 模块轻松访问 Spring Web Service 功能

可以分别为 WSDL 和 XSD 自动创建 SimpleWsdl11DefinitionSimpleXsdSchema bean。为此,请配置其位置,如下所示:

  1. spring.webservices.wsdl-locations=classpath:/wsdl

47.1、使用 WebServiceTemplate 调用 Web Service

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

以下代码为一个典型示例:

  1. @Service
  2. public class MyService {
  3. private final WebServiceTemplate webServiceTemplate;
  4. public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) {
  5. this.webServiceTemplate = webServiceTemplateBuilder.build();
  6. }
  7. public DetailsResp someWsCall(DetailsReq detailsReq) {
  8. return (DetailsResp) this.webServiceTemplate.marshalSendAndReceive(detailsReq, new SoapActionCallback(ACTION));
  9. }
  10. }

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

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