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이 관리하는 빈은 컨테이너 수명 주기를 사용할 수 있습니다. 다른 전송자를 유지하는 다른 템플릿은 자체 전송 구성을 그대로 둡니다.

관련 글