Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import static java.util.Collections.singleton;
- import java.net.URI;
- import java.nio.charset.StandardCharsets;
- import org.apache.http.HttpHost;
- import org.apache.http.HttpStatus;
- import org.apache.http.auth.AuthSchemeProvider;
- import org.apache.http.auth.AuthScope;
- import org.apache.http.auth.NTCredentials;
- import org.apache.http.auth.UsernamePasswordCredentials;
- import org.apache.http.client.CredentialsProvider;
- import org.apache.http.client.config.AuthSchemes;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.config.Registry;
- import org.apache.http.config.RegistryBuilder;
- import org.apache.http.entity.StringEntity;
- import org.apache.http.impl.auth.DigestSchemeFactory;
- import org.apache.http.impl.auth.NTLMSchemeFactory;
- import org.apache.http.impl.client.BasicCredentialsProvider;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.util.EntityUtils;
- import org.springframework.beans.factory.DisposableBean;
- import org.springframework.beans.factory.annotation.Autowired;
- public class ServiceClient implements DisposableBean {
- static final Exception EXCEPTION = new RuntimeException("...");
- private final URI uri;
- private final CloseableHttpClient httpClient;
- @Autowired
- public ServiceClient(
- final URI uri,
- final String credentials,
- final String proxyHostName,
- final int proxyPort,
- final String proxyUser,
- final String proxyPassword) {
- this.uri = uri;
- final HttpHost proxyHost = new HttpHost(proxyHostName, proxyPort);
- final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
- credentialsProvider.setCredentials(new AuthScope(proxyHost, AuthScope.ANY_REALM, AuthSchemes.DIGEST), new UsernamePasswordCredentials(proxyUser, proxyPassword));
- credentialsProvider.setCredentials(new AuthScope(uri.getHost(), uri.getPort(), AuthScope.ANY_REALM, AuthSchemes.NTLM), new NTCredentials(credentials));
- final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider> create()
- .register(AuthSchemes.DIGEST, new DigestSchemeFactory())
- .register(AuthSchemes.NTLM, new NTLMSchemeFactory())
- .build();
- this.httpClient = HttpClients.custom()
- .setUserAgent("XXXX")
- .setDefaultCredentialsProvider(credentialsProvider)
- .setDefaultAuthSchemeRegistry(authSchemeRegistry)
- .setDefaultRequestConfig(RequestConfig.custom()
- .setTargetPreferredAuthSchemes(singleton(AuthSchemes.NTLM))
- .setProxyPreferredAuthSchemes(singleton(AuthSchemes.DIGEST))
- .setStaleConnectionCheckEnabled(true)
- .setSocketTimeout(30000)
- .setConnectTimeout(30000)
- .setConnectionRequestTimeout(30000)
- .setProxy(proxyHost)
- .build())
- .build();
- }
- @Override
- public void destroy() throws Exception {
- this.httpClient.close();
- }
- public void invoke() throws Exception {
- final String response = this
- .request(
- "method",
- "<soap:Envelope xmlns:soap=\"http://sch...</soap:Envelope>");
- if (!response.contains("<success>true</success>")) {
- throw EXCEPTION;
- }
- }
- private String request(final String method, final String requestBody) throws Exception {
- final StringEntity entity = new StringEntity(requestBody, StandardCharsets.UTF_8);
- entity.setContentType("text/xml; charset=UTF-8");
- final HttpPost request = new HttpPost(this.uri);
- request.setEntity(entity);
- request.setHeader("SOAPAction", "\"http://tempuri.org/service/" + method + '"');
- try (CloseableHttpResponse response = this.httpClient.execute(request)) {
- if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
- throw new RuntimeException(response.getStatusLine().getReasonPhrase());
- }
- final String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
- return responseBody;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment