Ниже приведен мой класс конфигурации Spring Spring. Я хотел бы иметь весенний xml для этого. Путаница у меня есть, как преобразовать @Bean HttpClient в XML (мне нужно использовать фабричный метод?)Преобразование конфигурации Spring java в xml-конфигурацию
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.List;
import javax.net.ssl.SSLContext;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import com.google.common.collect.Lists;
@Configuration
public class RestClientConfig {
@Bean
public ClientHttpRequestFactory httpRequestFactory() throws GeneralSecurityException, IOException {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
public HttpClient httpClient() throws GeneralSecurityException, IOException {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
TrustStrategy allTrust = new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
};
SSLContext sslcontext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, allTrust).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
return httpClient;
}
@Bean
public RestTemplate restTemplate() throws GeneralSecurityException, IOException {
RestTemplate restTemplate = new RestTemplate(httpRequestFactory());
List<ClientHttpRequestInterceptor> interceptors = Lists.newArrayList();
interceptors.add(new RestAuthInterceptor());
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
}
:: EDIT :: Это то, что я сделал после того, как получать помощь от Хосе Луис Мартин и MariuszS. XML файла:
<bean id="httpClient" class="com.orbit.restclient.support.CustomHttpClientFactory" />
<bean class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<constructor-arg ref="httpClient" />
</bean>
</constructor-arg>
<property name="interceptors">
<list>
<bean class="com.orbit.restclient.support.RestAuthInterceptor" />
</list>
</property>
</bean>
Пользовательский класс: Конфигурация
public class CustomHttpClientFactory implements FactoryBean<HttpClient> {
@Override
public HttpClient getObject() throws Exception {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
// TODO: update code here to validate certificate. This code allows all certificates
TrustStrategy allTrust = new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
};
SSLContext sslcontext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, allTrust).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
return httpClient;
}
@Override
public Class<HttpClient> getObjectType() {
return HttpClient.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
Для преобразования этой конфигурации Java в XML определенно не очевидно, и я не рекомендую этого делать. Почему вы хотите? –
Я подготовил POC, используя весну 3.2 с конфигурацией Java. Теперь меня попросят внедрить это в существующее приложение (со всей конфигурацией xml). Мне задали xml-конфигурацию (java config, может быть и позже !!) – Ketan
Вы можете смешивать xml и конфигурацию Java в одном приложении ... – MariuszS