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 و سایر تنظیمات را حفظ کنید. این Spring-WS 4.1.0 با Apache HttpClient 5 است. اگر قالب به یک سرویس SOAP عمومی مجاز بدون احراز هویت پروکسی اشاره کند، یک نشانی HTTP از فهرست پروکسی های HTTP می‌تواند پروکسی سفارشی‌ساز را پر کند.

withDefaults میانافزاری را که Content-Length و Transfer-Encoding ارائه‌شده توسط SOAP را پیش از ایجاد قالب‌بندی HTTP توسط Apache حذف می‌کند، حفظ می‌کند. افزودن سفارشی‌ساز پروکسی در همان‌جا مانع از جایگزینی این یکپارچگی با یک کلاینت خام می‌شود. برای یک کلاینت Apache که جداگانه ساخته می‌شود، میانافزار حذف سرصفحه در Spring-WS را حفظ کنید.

واردات و تولید فرستنده را هم‌راستا کنید. نمونه‌های قدیمی که از HttpComponentsMessageSender/org.apache.http استفاده می‌کنند از Apache 4 بهره می‌برند، نه این SimpleHttpComponents5MessageSender و رابط HttpHost.

یک فرستنده دستی را در تمام عمر کلاینت SOAP نگه دارید و پس از آن انهدام عادی آن را ترتیب دهید. یک bean مدیریت‌شده توسط Spring می‌تواند از چرخه زندگی کانتینر استفاده کند. قالب‌های دیگری که فرستنده‌های دیگری را نگه می‌دارند پیکربندی انتقال خود را حفظ می‌کنند.

مقالات مرتبط