import org.apache.hc.core5.http.HttpHost;
import org.springframework.ws.transport.http.HttpComponents5ClientFactory;
import org.springframework.ws.transport.http.SimpleHttpComponents5MessageSender;

var factory = HttpComponents5ClientFactory.withDefaults();
factory.addClientBuilderCustomizer(builder ->
    builder.setProxy(new HttpHost("http", "proxy.example", 8080)));

var sender = new SimpleHttpComponents5MessageSender(factory);
template.setMessageSender(sender);

在调用之前,将此发送器应用到现有的 template,并保留服务 URI、marshaller 及其他设置。这是搭配 Apache HttpClient 5 的 Spring-WS 4.1.0。如果模板面向允许的公共服务 SOAP 且无需代理认证,可以用HTTP 代理列表中的 HTTP 地址填写自定义器的代理。

withDefaults 保留拦截器,它在 Apache 生成 HTTP 分帧之前移除 SOAP 提供的 Content-Length 和 Transfer-Encoding。在此处添加代理自定义器,可避免用裸客户端替换该集成。对于单独构建的 Apache 客户端,请保留 Spring-WS 的头部移除拦截器。

让导入与发送器生成保持一致。使用 HttpComponentsMessageSender/org.apache.http 的旧示例针对 Apache 4,而不是此 SimpleHttpComponents5MessageSender 与 HttpHost 接口。

在 SOAP 客户端的整个生命周期内保留手动创建的发送器,并在之后安排正常销毁。由 Spring 管理的 bean 可以使用容器生命周期。保留其他发送器的其他模板则维持各自的传输配置。

相关文章