跳到主要内容

Web 服务

DeepSeek V3 中英对照 Web Services

Spring Boot 提供了 Web Services 的自动配置,因此你只需要定义你的 @Endpoint Bean 即可。

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

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

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

使用 WebServiceTemplate 调用 Web 服务

如果你需要从应用程序中调用远程 Web 服务,可以使用 WebServiceTemplate 类。由于 WebServiceTemplate 实例在使用前通常需要定制,Spring Boot 并没有提供任何自动配置的 WebServiceTemplate Bean。不过,它确实自动配置了一个 WebServiceTemplateBuilder,该构建器可以在需要时用于创建 WebServiceTemplate 实例。

以下代码展示了一个典型示例:

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"));
}

}
java

默认情况下,WebServiceTemplateBuilder 会检测类路径上可用的 HTTP 客户端库,以选择合适的基于 HTTP 的 WebServiceMessageSender。您还可以为单个构建器自定义读取和连接超时,如下所示:

import java.time.Duration;

import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
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) {
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults()
.withConnectTimeout(Duration.ofSeconds(2))
.withReadTimeout(Duration.ofSeconds(2));
builder.httpMessageSenderFactory(WebServiceMessageSenderFactory.http(settings));
return builder.build();
}

}
java
提示

如果没有应用特定的模板自定义代码,你也可以更改全局 HTTP 客户端配置