网络服务
Spring Boot 提供 Web 服务自动配置,您只需定义@Endpoint豆。
Spring Web 服务的功能可以通过以下功能轻松访问Spring-boot-starter-webservices模块。
SimpleWsdl11定义和SimpleXsdSchema豆子可以分别为你的WSDL(和XSD)自动生成。
为此,请配置它们的位置,如下示例所示:
-
Properties
-
YAML
spring.webservices.wsdl-locations=classpath:/wsdl
spring:
webservices:
wsdl-locations: "classpath:/wsdl"
使用 WebServiceTemplate 调用 Web 服务
如果你需要从应用调用远程 Web 服务,可以使用WebService模板类。
因为WebService模板实例通常需要在使用前进行自定义,Spring Boot 不提供任何单一的自动配置功能WebService模板豆。
不过,它确实会自动配置WebService模板构建器,可以用来创建WebService模板需要时才会做。
以下代码展示了一个典型例子:
-
Java
-
Kotlin
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
import org.springframework.stereotype.Service;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.soap.client.core.SoapActionCallback;
@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"));
}
}
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder
import org.springframework.stereotype.Service
import org.springframework.ws.client.core.WebServiceTemplate
import org.springframework.ws.soap.client.core.SoapActionCallback
@Service
class MyService(webServiceTemplateBuilder: WebServiceTemplateBuilder) {
private val webServiceTemplate: WebServiceTemplate
init {
webServiceTemplate = webServiceTemplateBuilder.build()
}
fun someWsCall(detailsReq: SomeRequest): SomeResponse {
return webServiceTemplate.marshalSendAndReceive(
detailsReq,
SoapActionCallback("https://ws.example.com/action")
) as SomeResponse
}
}
默认情况下,WebService模板构建器检测基于HTTP的合适方法WebServiceMessageSender使用类路径上的可用HTTP客户端库。
你还可以为单个架构商自定义读取和连接超时,具体如下:
-
Java
-
Kotlin
import java.time.Duration;
import org.springframework.boot.http.client.HttpClientSettings;
import org.springframework.boot.webservices.client.WebServiceMessageSenderFactory;
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ws.client.core.WebServiceTemplate;
@Configuration(proxyBeanMethods = false)
public class MyWebServiceTemplateConfiguration {
@Bean
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
HttpClientSettings settings = HttpClientSettings.defaults()
.withConnectTimeout(Duration.ofSeconds(2))
.withReadTimeout(Duration.ofSeconds(2));
builder.httpMessageSenderFactory(WebServiceMessageSenderFactory.http(settings));
return builder.build();
}
}
import org.springframework.boot.http.client.HttpClientSettings
import org.springframework.boot.webservices.client.WebServiceMessageSenderFactory
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.ws.client.core.WebServiceTemplate
import java.time.Duration
@Configuration(proxyBeanMethods = false)
class MyWebServiceTemplateConfiguration {
@Bean
fun webServiceTemplate(builder: WebServiceTemplateBuilder): WebServiceTemplate {
val settings = HttpClientSettings.defaults()
.withConnectTimeout(Duration.ofSeconds(2))
.withReadTimeout(Duration.ofSeconds(2))
builder.httpMessageSenderFactory(WebServiceMessageSenderFactory.http(settings))
return builder.build()
}
}
| 如果没有应用特定的模板定制代码,你也可以更改所使用的全局HTTP客户端配置。 |