# 11.7. web services

Spring Boot 提供 Web 服务自动配置，因此您所要做的就是定义您的`Endpoints`.

使用`spring-boot-starter-webservices`模块可以轻松访问[Spring Web Services](https://docs.spring.io/spring-ws/docs/4.0.8/reference/html/)功能。

`SimpleWsdl11Definition`和`SimpleXsdSchema`beans 可以分别为您的 WSDL 和 XSD 机型自动创建。为此，请配置它们的位置，如以下示例所示：

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

**11.7.1. 使用 WebServiceTemplate 调用 Web 服务**

如果您需要从应用程序调用远程 Web 服务，则可以使用该类[`WebServiceTemplate`](https://docs.spring.io/spring-ws/docs/4.0.8/reference/html/#client-web-service-template)。由于`WebServiceTemplate`实例在使用之前通常需要进行自定义，因此 Spring Boot 不提供任何单个自动配置的`WebServiceTemplate`bean。但是，它会自动配置 `WebServiceTemplateBuilder`，可用于在需要时创建`WebServiceTemplate`实例。

下面的代码展示了一个典型的例子：

```
@Service
public class MyService {
​
    private final WebServiceTemplate webServiceTemplate;
​
    public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) {
        this.webServiceTemplate = webServiceTemplateBuilder.build();
    }
​
    public SomeResponse someWsCall(SomeRequest detailsReq) {
        return (SomeResponse) this.webServiceTemplate.marshalSendAndReceive(detailsReq,
                new SoapActionCallback("https://ws.example.com/action"));
    }
​
}
```

默认情况下，`WebServiceTemplateBuilder` 使用类路径上的可用 HTTP 客户端库检测合适的基于 HTTP 的 `WebServiceMessageSender`。您还可以自定义读取和连接超时，如下所示：

```
@Configuration(proxyBeanMethods = false)
public class MyWebServiceTemplateConfiguration {
​
    @Bean
    public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
        WebServiceMessageSender sender = new HttpWebServiceMessageSenderBuilder()
                .setConnectTimeout(Duration.ofSeconds(5))
                .setReadTimeout(Duration.ofSeconds(2))
                .build();
        return builder.messageSenders(sender).build();
    }
​
}
```
