Конечная точка Apache Camel CXF - укажите http(s) прокси?
Я пытался настроить конечную точку CXF в Camel, используя конфигурацию Spring Java следующим образом:
@Bean
public CxfEndpoint anEndpoint() {
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setAddress(getEndpointUrl());
endpoint.setServiceClass(ServiceSOAP.class);
endpoint.setWsdlURL("/wsdl/ServiceSOAP.wsdl");
String httpProxyHost = httpProxyHost();
String httpProxyPort = httpProxyPort();
Map<String, Object> properties = new HashMap<>();
properties.put("https.proxyHost", httpProxyHost());
properties.put("https.proxyPort", httpProxyPort());
properties.put("http.proxyHost", httpProxyHost());
properties.put("http.proxyPort", httpProxyPort());
endpoint.setProperties(properties);
return endpoint;
}
Однако это не работает ни для URL-адресов конечных точек http, ни для https.
Я также попытался установить эти свойства непосредственно в CamelContext с тем же результатом.
Маршрут работает нормально в среде с прямым подключением к Интернету, например, локально, но не там, где он развернут за http-прокси.
Мы используем Apache Camel 2.15.2 и Apache CXF 3.1.0. Любая помощь очень ценится!
1 ответ
Решение
Резолюция оказалась простой, но извилистой. Нужно использовать CxfEndpointConfigurator для настройки свойств HTTPConduit следующим образом:
@Bean
public CxfEndpoint anEndpoint() {
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setAddress(getEndpointUrl());
endpoint.setServiceClass(ServiceSOAP.class);
endpoint.setWsdlURL("/wsdl/ServiceSOAP.wsdl");
endpoint.setCxfEndpointConfigurer(anEndpointClientConfigurer());
return endpoint;
}
private CxfEndpointConfigurer anEndpointClientConfigurer() {
return new CxfEndpointConfigurer() {
@Override
public void configure(AbstractWSDLBasedEndpointFactory factoryBean) {
}
@Override
public void configureClient(Client client) {
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setProxyServer(httpProxyHost());
policy.setProxyServerPort(httpProxyPort());
conduit.setClient(policy);
}
}