Web 服務
Spring Boot 提供 Web Services 自動配置,因此您只需定義您的 @Endpoint bean 即可。
透過 spring-boot-starter-webservices 模組可以輕鬆訪問 Spring Web Services 功能。
SimpleWsdl11Definition 和 SimpleXsdSchema bean 可以分別為您的 WSDL 和 XSD 自動建立。為此,請配置它們的 位置,如以下示例所示
-
屬性
-
YAML
spring.webservices.wsdl-locations=classpath:/wsdl
spring:
webservices:
wsdl-locations: "classpath:/wsdl"
使用 WebServiceTemplate 呼叫 Web Services
如果您的應用程式需要呼叫遠端 Web 服務,可以使用 WebServiceTemplate 類。由於 WebServiceTemplate 例項在使用前通常需要進行自定義,因此 Spring Boot 不提供任何單一的自動配置 WebServiceTemplate bean。但是,它會自動配置一個 WebServiceTemplateBuilder,當需要時,可以使用它來建立 WebServiceTemplate 例項。
以下程式碼顯示了一個典型示例
-
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
}
}
預設情況下,WebServiceTemplateBuilder 使用類路徑上可用的 HTTP 客戶端庫檢測合適的基於 HTTP 的 WebServiceMessageSender。您還可以如下自定義單個構建器的讀取和連線超時
-
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 客戶端配置。 |