Guest User

ServiceClient.java

a guest
Sep 12th, 2014
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. import static java.util.Collections.singleton;
  2.  
  3. import java.net.URI;
  4. import java.nio.charset.StandardCharsets;
  5.  
  6. import org.apache.http.HttpHost;
  7. import org.apache.http.HttpStatus;
  8. import org.apache.http.auth.AuthSchemeProvider;
  9. import org.apache.http.auth.AuthScope;
  10. import org.apache.http.auth.NTCredentials;
  11. import org.apache.http.auth.UsernamePasswordCredentials;
  12. import org.apache.http.client.CredentialsProvider;
  13. import org.apache.http.client.config.AuthSchemes;
  14. import org.apache.http.client.config.RequestConfig;
  15. import org.apache.http.client.methods.CloseableHttpResponse;
  16. import org.apache.http.client.methods.HttpPost;
  17. import org.apache.http.config.Registry;
  18. import org.apache.http.config.RegistryBuilder;
  19. import org.apache.http.entity.StringEntity;
  20. import org.apache.http.impl.auth.DigestSchemeFactory;
  21. import org.apache.http.impl.auth.NTLMSchemeFactory;
  22. import org.apache.http.impl.client.BasicCredentialsProvider;
  23. import org.apache.http.impl.client.CloseableHttpClient;
  24. import org.apache.http.impl.client.HttpClients;
  25. import org.apache.http.util.EntityUtils;
  26. import org.springframework.beans.factory.DisposableBean;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28.  
  29. public class ServiceClient implements DisposableBean {
  30.    
  31.     static final Exception EXCEPTION = new RuntimeException("...");
  32.    
  33.     private final URI uri;
  34.    
  35.     private final CloseableHttpClient httpClient;
  36.    
  37.     @Autowired
  38.     public ServiceClient(
  39.             final URI uri,
  40.             final String credentials,
  41.             final String proxyHostName,
  42.             final int proxyPort,
  43.             final String proxyUser,
  44.             final String proxyPassword) {
  45.         this.uri = uri;
  46.        
  47.         final HttpHost proxyHost = new HttpHost(proxyHostName, proxyPort);
  48.        
  49.         final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  50.         credentialsProvider.setCredentials(new AuthScope(proxyHost, AuthScope.ANY_REALM, AuthSchemes.DIGEST), new UsernamePasswordCredentials(proxyUser, proxyPassword));
  51.         credentialsProvider.setCredentials(new AuthScope(uri.getHost(), uri.getPort(), AuthScope.ANY_REALM, AuthSchemes.NTLM), new NTCredentials(credentials));
  52.        
  53.         final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider> create()
  54.                 .register(AuthSchemes.DIGEST, new DigestSchemeFactory())
  55.                 .register(AuthSchemes.NTLM, new NTLMSchemeFactory())
  56.                 .build();
  57.        
  58.         this.httpClient = HttpClients.custom()
  59.                 .setUserAgent("XXXX")
  60.                 .setDefaultCredentialsProvider(credentialsProvider)
  61.                 .setDefaultAuthSchemeRegistry(authSchemeRegistry)
  62.                 .setDefaultRequestConfig(RequestConfig.custom()
  63.                         .setTargetPreferredAuthSchemes(singleton(AuthSchemes.NTLM))
  64.                         .setProxyPreferredAuthSchemes(singleton(AuthSchemes.DIGEST))
  65.                         .setStaleConnectionCheckEnabled(true)
  66.                         .setSocketTimeout(30000)
  67.                         .setConnectTimeout(30000)
  68.                         .setConnectionRequestTimeout(30000)
  69.                         .setProxy(proxyHost)
  70.                         .build())
  71.                 .build();
  72.     }
  73.    
  74.     @Override
  75.     public void destroy() throws Exception {
  76.         this.httpClient.close();
  77.     }
  78.    
  79.     public void invoke() throws Exception {
  80.         final String response = this
  81.                 .request(
  82.                         "method",
  83.                         "<soap:Envelope xmlns:soap=\"http://sch...</soap:Envelope>");
  84.        
  85.         if (!response.contains("<success>true</success>")) {
  86.             throw EXCEPTION;
  87.         }
  88.     }
  89.    
  90.     private String request(final String method, final String requestBody) throws Exception {
  91.         final StringEntity entity = new StringEntity(requestBody, StandardCharsets.UTF_8);
  92.         entity.setContentType("text/xml; charset=UTF-8");
  93.        
  94.         final HttpPost request = new HttpPost(this.uri);
  95.         request.setEntity(entity);
  96.         request.setHeader("SOAPAction", "\"http://tempuri.org/service/" + method + '"');
  97.        
  98.         try (CloseableHttpResponse response = this.httpClient.execute(request)) {
  99.             if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
  100.                 throw new RuntimeException(response.getStatusLine().getReasonPhrase());
  101.             }
  102.             final String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
  103.             return responseBody;
  104.         }
  105.     }
  106.    
  107. }
Advertisement
Add Comment
Please, Sign In to add comment