11.7. web services

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

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

SimpleWsdl11DefinitionSimpleXsdSchemabeans 可以分别为您的 WSDL 和 XSD 机型自动创建。为此,请配置它们的位置,如以下示例所示:

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

11.7.1. 使用 WebServiceTemplate 调用 Web 服务

如果您需要从应用程序调用远程 Web 服务,则可以使用该类WebServiceTemplate。由于WebServiceTemplate实例在使用之前通常需要进行自定义,因此 Spring Boot 不提供任何单个自动配置的WebServiceTemplatebean。但是,它会自动配置 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();
    }

}

最后更新于