You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/07/05 09:05:05 UTC

[2/2] kylin git commit: KYLIN-1654: Upgrade http client library to 4.5

KYLIN-1654: Upgrade http client library to 4.5

Signed-off-by: Li Yang <li...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1397bbb5
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1397bbb5
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1397bbb5

Branch: refs/heads/master
Commit: 1397bbb5d51f06a53f88fc9621bb688229bfba26
Parents: ff1aec3
Author: Yiming Liu <li...@gmail.com>
Authored: Tue Jul 5 11:25:13 2016 +0800
Committer: Li Yang <li...@apache.org>
Committed: Tue Jul 5 16:59:06 2016 +0800

----------------------------------------------------------------------
 core-common/pom.xml                             |   4 +-
 .../kylin/common/restclient/RestClient.java     |  57 +++----
 jdbc/pom.xml                                    |   4 +-
 .../java/org/apache/kylin/jdbc/KylinClient.java |  94 +++++++-----
 .../util/DefaultSslProtocolSocketFactory.java   | 148 -------------------
 .../jdbc/util/DefaultX509TrustManager.java      | 114 --------------
 pom.xml                                         |  17 +--
 7 files changed, 97 insertions(+), 341 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/core-common/pom.xml
----------------------------------------------------------------------
diff --git a/core-common/pom.xml b/core-common/pom.xml
index 80d2b4b..5d5369f 100644
--- a/core-common/pom.xml
+++ b/core-common/pom.xml
@@ -65,8 +65,8 @@
             <artifactId>commons-email</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
         </dependency>
         <dependency>
 	        <groupId>org.apache.httpcomponents</groupId>

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 069a142..050d911 100644
--- a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -23,15 +23,16 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.PutMethod;
-import org.apache.kylin.common.util.Bytes;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPut;
+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.apache.kylin.common.util.JsonUtil;
 
 /**
@@ -44,7 +45,7 @@ public class RestClient {
     protected String baseUrl;
     protected String userName;
     protected String password;
-    protected HttpClient client;
+    protected CloseableHttpClient client;
 
     protected static Pattern fullRestPattern = Pattern.compile("(?:([^:]+)[:]([^@]+)[@])?([^:]+)(?:[:](\\d+))?");
 
@@ -78,27 +79,28 @@ public class RestClient {
         this.password = password;
         this.baseUrl = "http://" + host + ":" + port + "/kylin/api";
 
-        client = new HttpClient();
+        client = HttpClients.createDefault();
 
         if (userName != null && password != null) {
-            client.getParams().setAuthenticationPreemptive(true);
-            Credentials creds = new UsernamePasswordCredentials(userName, password);
-            client.getState().setCredentials(new AuthScope(host, port, AuthScope.ANY_REALM), creds);
+            CredentialsProvider provider = new BasicCredentialsProvider();
+            UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(userName, password);
+            provider.setCredentials(AuthScope.ANY, credentials);
+            client = HttpClients.custom().setDefaultCredentialsProvider(provider).build();
         }
     }
 
     public void wipeCache(String type, String action, String name) throws IOException {
         String url = baseUrl + "/cache/" + type + "/" + name + "/" + action;
-        HttpMethod request = new PutMethod(url);
+        HttpPut request = new HttpPut(url);
 
         try {
-            int code = client.executeMethod(request);
-            String msg = Bytes.toString(request.getResponseBody());
+            CloseableHttpResponse response = client.execute(request);
+            String msg = EntityUtils.toString(response.getEntity());
 
-            if (code != 200)
-                throw new IOException("Invalid response " + code + " with cache wipe url " + url + "\n" + msg);
-
-        } catch (HttpException ex) {
+            if (response.getStatusLine().getStatusCode() != 200)
+                throw new IOException("Invalid response " + response.getStatusLine().getStatusCode() + " with cache wipe url " + url + "\n" + msg);
+            response.close();
+        } catch (Exception ex) {
             throw new IOException(ex);
         } finally {
             request.releaseConnection();
@@ -107,18 +109,17 @@ public class RestClient {
 
     public String getKylinProperties() throws IOException {
         String url = baseUrl + "/admin/config";
-        HttpMethod request = new GetMethod(url);
+        HttpGet request = new HttpGet(url);
         try {
-            int code = client.executeMethod(request);
-            String msg = Bytes.toString(request.getResponseBody());
+            CloseableHttpResponse response = client.execute(request);
+            String msg = EntityUtils.toString(response.getEntity());
             Map<String, String> map = JsonUtil.readValueAsMap(msg);
             msg = map.get("config");
 
-            if (code != 200)
-                throw new IOException("Invalid response " + code + " with cache wipe url " + url + "\n" + msg);
-
+            if (response.getStatusLine().getStatusCode() != 200)
+                throw new IOException("Invalid response " + response.getStatusLine().getStatusCode() + " with cache wipe url " + url + "\n" + msg);
+            response.close();
             return msg;
-
         } finally {
             request.releaseConnection();
         }

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
index 8a0d02c..3977d85 100644
--- a/jdbc/pom.xml
+++ b/jdbc/pom.xml
@@ -51,8 +51,8 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
index b7eee34..10c01ef 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
@@ -20,6 +20,7 @@ package org.apache.kylin.jdbc;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.security.cert.X509Certificate;
 import java.sql.Date;
 import java.sql.Time;
 import java.sql.Timestamp;
@@ -30,19 +31,26 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import javax.net.ssl.SSLContext;
 import javax.xml.bind.DatatypeConverter;
 
 import org.apache.calcite.avatica.AvaticaParameter;
 import org.apache.calcite.avatica.ColumnMetaData;
 import org.apache.calcite.avatica.ColumnMetaData.Rep;
 import org.apache.calcite.avatica.ColumnMetaData.ScalarType;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.commons.httpclient.methods.StringRequestEntity;
-import org.apache.commons.httpclient.protocol.Protocol;
-import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.conn.ssl.DefaultHostnameVerifier;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
 import org.apache.kylin.jdbc.KylinMeta.KMetaCatalog;
 import org.apache.kylin.jdbc.KylinMeta.KMetaColumn;
 import org.apache.kylin.jdbc.KylinMeta.KMetaProject;
@@ -54,7 +62,6 @@ import org.apache.kylin.jdbc.json.SQLResponseStub;
 import org.apache.kylin.jdbc.json.StatementParameter;
 import org.apache.kylin.jdbc.json.TableMetaStub;
 import org.apache.kylin.jdbc.json.TableMetaStub.ColumnMetaStub;
-import org.apache.kylin.jdbc.util.DefaultSslProtocolSocketFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,18 +74,28 @@ public class KylinClient implements IRemoteClient {
 
     private final KylinConnection conn;
     private final Properties connProps;
-    private final HttpClient httpClient;
+    private CloseableHttpClient httpClient;
     private final ObjectMapper jsonMapper;
 
     public KylinClient(KylinConnection conn) {
         this.conn = conn;
         this.connProps = conn.getConnectionProperties();
-        this.httpClient = new HttpClient();
+        this.httpClient = HttpClients.createDefault();
         this.jsonMapper = new ObjectMapper();
 
         // trust all certificates
         if (isSSL()) {
-            Protocol.registerProtocol("https", new Protocol("https", (ProtocolSocketFactory) new DefaultSslProtocolSocketFactory(), 443));
+            try {
+                TrustStrategy acceptingTrustStrategy = new TrustStrategy() {
+                    public boolean isTrusted(X509Certificate[] certificate, String type) {
+                        return true;
+                    }
+                };
+                SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
+                httpClient = HttpClients.custom().setSSLHostnameVerifier(new DefaultHostnameVerifier()).setSSLContext(sslContext).build();
+            } catch (Exception e) {
+                throw new RuntimeException("Initialize HTTPS client failed", e);
+            }
         }
     }
 
@@ -193,28 +210,29 @@ public class KylinClient implements IRemoteClient {
         return (isSSL() ? "https://" : "http://") + conn.getBaseUrl();
     }
 
-    private void addHttpHeaders(HttpMethodBase method) {
-        method.addRequestHeader("Accept", "application/json, text/plain, */*");
-        method.addRequestHeader("Content-Type", "application/json");
+    private void addHttpHeaders(HttpRequestBase method) {
+        method.addHeader("Accept", "application/json, text/plain, */*");
+        method.addHeader("Content-Type", "application/json");
 
         String username = connProps.getProperty("user");
         String password = connProps.getProperty("password");
         String basicAuth = DatatypeConverter.printBase64Binary((username + ":" + password).getBytes());
-        method.addRequestHeader("Authorization", "Basic " + basicAuth);
+        method.addHeader("Authorization", "Basic " + basicAuth);
     }
 
     @Override
     public void connect() throws IOException {
-        PostMethod post = new PostMethod(baseUrl() + "/kylin/api/user/authentication");
+        HttpPost post = new HttpPost(baseUrl() + "/kylin/api/user/authentication");
         addHttpHeaders(post);
-        StringRequestEntity requestEntity = new StringRequestEntity("{}", "application/json", "UTF-8");
-        post.setRequestEntity(requestEntity);
+        StringEntity requestEntity = new StringEntity("{}", ContentType.create("application/json", "UTF-8"));
+        post.setEntity(requestEntity);
 
-        httpClient.executeMethod(post);
+        CloseableHttpResponse response = httpClient.execute(post);
 
-        if (post.getStatusCode() != 200 && post.getStatusCode() != 201) {
-            throw asIOException(post);
+        if (response.getStatusLine().getStatusCode() != 200 && response.getStatusLine().getStatusCode() != 201) {
+            throw asIOException(post, response);
         }
+        response.close();
     }
 
     @Override
@@ -222,21 +240,22 @@ public class KylinClient implements IRemoteClient {
         assert conn.getProject().equals(project);
 
         String url = baseUrl() + "/kylin/api/tables_and_columns?project=" + project;
-        GetMethod get = new GetMethod(url);
+        HttpGet get = new HttpGet(url);
         addHttpHeaders(get);
 
-        httpClient.executeMethod(get);
+        CloseableHttpResponse response = httpClient.execute(get);
 
-        if (get.getStatusCode() != 200 && get.getStatusCode() != 201) {
-            throw asIOException(get);
+        if (response.getStatusLine().getStatusCode() != 200 && response.getStatusLine().getStatusCode() != 201) {
+            throw asIOException(get, response);
         }
 
-        List<TableMetaStub> tableMetaStubs = jsonMapper.readValue(get.getResponseBodyAsStream(), new TypeReference<List<TableMetaStub>>() {
+        List<TableMetaStub> tableMetaStubs = jsonMapper.readValue(response.getEntity().getContent(), new TypeReference<List<TableMetaStub>>() {
         });
 
         List<KMetaTable> tables = convertMetaTables(tableMetaStubs);
         List<KMetaSchema> schemas = convertMetaSchemas(tables);
         List<KMetaCatalog> catalogs = convertMetaCatalogs(schemas);
+        response.close();
         return new KMetaProject(project, catalogs);
     }
 
@@ -341,21 +360,23 @@ public class KylinClient implements IRemoteClient {
         request.setSql(sql);
         request.setProject(project);
 
-        PostMethod post = new PostMethod(url);
+        HttpPost post = new HttpPost(url);
         addHttpHeaders(post);
 
         String postBody = jsonMapper.writeValueAsString(request);
         logger.debug("Post body:\n " + postBody);
-        StringRequestEntity requestEntity = new StringRequestEntity(postBody, "application/json", "UTF-8");
-        post.setRequestEntity(requestEntity);
+        StringEntity requestEntity = new StringEntity(postBody, ContentType.create("application/json", "UTF-8"));
+        post.setEntity(requestEntity);
 
-        httpClient.executeMethod(post);
+        CloseableHttpResponse response = httpClient.execute(post);
 
-        if (post.getStatusCode() != 200 && post.getStatusCode() != 201) {
-            throw asIOException(post);
+        if (response.getStatusLine().getStatusCode() != 200 && response.getStatusLine().getStatusCode() != 201) {
+            throw asIOException(post, response);
         }
 
-        return jsonMapper.readValue(post.getResponseBodyAsStream(), SQLResponseStub.class);
+        SQLResponseStub stub = jsonMapper.readValue(response.getEntity().getContent(), SQLResponseStub.class);
+        response.close();
+        return stub;
     }
 
     private List<ColumnMetaData> convertColumnMeta(SQLResponseStub queryResp) {
@@ -388,11 +409,14 @@ public class KylinClient implements IRemoteClient {
         return (List<Object>) data;
     }
 
-    private IOException asIOException(HttpMethodBase method) throws IOException {
-        return new IOException(method + " failed, error code " + method.getStatusCode() + " and response: " + method.getResponseBodyAsString());
+    private IOException asIOException(HttpRequestBase request, HttpResponse response) throws IOException {
+        return new IOException(request.getMethod() + " failed, error code " + response.getStatusLine().getStatusCode() + " and response: " + EntityUtils.toString(response.getEntity()));
     }
 
     @Override
     public void close() throws IOException {
+        if (httpClient != null) {
+            httpClient.close();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultSslProtocolSocketFactory.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultSslProtocolSocketFactory.java b/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultSslProtocolSocketFactory.java
deleted file mode 100644
index 83020b5..0000000
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultSslProtocolSocketFactory.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.kylin.jdbc.util;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-
-import org.apache.commons.httpclient.ConnectTimeoutException;
-import org.apache.commons.httpclient.HttpClientError;
-import org.apache.commons.httpclient.params.HttpConnectionParams;
-import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory;
-import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- */
-public class DefaultSslProtocolSocketFactory implements SecureProtocolSocketFactory {
-    /** Log object for this class. */
-    private static Logger logger = LoggerFactory.getLogger(DefaultSslProtocolSocketFactory.class);
-    private SSLContext sslcontext = null;
-
-    /**
-     * Constructor for DefaultSslProtocolSocketFactory.
-     */
-    public DefaultSslProtocolSocketFactory() {
-        super();
-    }
-
-    private static SSLContext createEasySSLContext() {
-        try {
-            SSLContext context = SSLContext.getInstance("TLS");
-            context.init(null, new TrustManager[] { new DefaultX509TrustManager(null) }, null);
-
-            return context;
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new HttpClientError(e.toString());
-        }
-    }
-
-    /**
-     * @see SecureProtocolSocketFactory#createSocket(java.lang.String,int,java.net.InetAddress,int)
-     */
-    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException {
-        return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
-    }
-
-    /**
-     * Attempts to get a new socket connection to the given host within the
-     * given time limit.
-     *
-     * <p>
-     * To circumvent the limitations of older JREs that do not support connect
-     * timeout a controller thread is executed. The controller thread attempts
-     * to create a new socket within the given limit of time. If socket
-     * constructor does not return until the timeout expires, the controller
-     * terminates and throws an {@link ConnectTimeoutException}
-     * </p>
-     *
-     * @param host
-     *            the host name/IP
-     * @param port
-     *            the port on the host
-     * @param localAddress
-     *            the local host name/IP to bind the socket to
-     * @param localPort
-     *            the port on the local machine
-     * @param params
-     *            {@link HttpConnectionParams Http connection parameters}
-     *
-     * @return Socket a new socket
-     *
-     * @throws IOException
-     *             if an I/O error occurs while creating the socket
-     * @throws UnknownHostException
-     *             if the IP address of the host cannot be determined
-     * @throws ConnectTimeoutException
-     *             DOCUMENT ME!
-     * @throws IllegalArgumentException
-     *             DOCUMENT ME!
-     */
-    public Socket createSocket(final String host, final int port, final InetAddress localAddress, final int localPort, final HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException {
-        if (params == null) {
-            throw new IllegalArgumentException("Parameters may not be null");
-        }
-
-        int timeout = params.getConnectionTimeout();
-
-        if (timeout == 0) {
-            return createSocket(host, port, localAddress, localPort);
-        } else {
-            // To be eventually deprecated when migrated to Java 1.4 or above
-            return ControllerThreadSocketFactory.createSocket(this, host, port, localAddress, localPort, timeout);
-        }
-    }
-
-    /**
-     * @see SecureProtocolSocketFactory#createSocket(java.lang.String,int)
-     */
-    public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
-        return getSSLContext().getSocketFactory().createSocket(host, port);
-    }
-
-    /**
-     * @see SecureProtocolSocketFactory#createSocket(java.net.Socket,java.lang.String,int,boolean)
-     */
-    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
-        return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose);
-    }
-
-    public boolean equals(Object obj) {
-        return ((obj != null) && obj.getClass().equals(DefaultX509TrustManager.class));
-    }
-
-    public int hashCode() {
-        return DefaultX509TrustManager.class.hashCode();
-    }
-
-    private SSLContext getSSLContext() {
-        if (this.sslcontext == null) {
-            this.sslcontext = createEasySSLContext();
-        }
-
-        return this.sslcontext;
-    }
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultX509TrustManager.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultX509TrustManager.java b/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultX509TrustManager.java
deleted file mode 100644
index 35be21b..0000000
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/util/DefaultX509TrustManager.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.kylin.jdbc.util;
-
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @author xduo
- * 
- */
-public class DefaultX509TrustManager implements X509TrustManager {
-
-    /** Log object for this class. */
-    private static Logger logger = LoggerFactory.getLogger(DefaultX509TrustManager.class);
-    private X509TrustManager standardTrustManager = null;
-
-    /**
-     * Constructor for DefaultX509TrustManager.
-     * 
-     */
-    public DefaultX509TrustManager(KeyStore keystore) throws NoSuchAlgorithmException, KeyStoreException {
-        super();
-
-        TrustManagerFactory factory = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
-        factory.init(keystore);
-
-        TrustManager[] trustmanagers = factory.getTrustManagers();
-
-        if (trustmanagers.length == 0) {
-            throw new NoSuchAlgorithmException("SunX509 trust manager not supported");
-        }
-
-        this.standardTrustManager = (X509TrustManager) trustmanagers[0];
-    }
-
-    public X509Certificate[] getAcceptedIssuers() {
-        return this.standardTrustManager.getAcceptedIssuers();
-    }
-
-    public boolean isClientTrusted(X509Certificate[] certificates) {
-        return true;
-        // return this.standardTrustManager.isClientTrusted(certificates);
-    }
-
-    public boolean isServerTrusted(X509Certificate[] certificates) {
-        if ((certificates != null) && logger.isDebugEnabled()) {
-            logger.debug("Server certificate chain:");
-
-            for (int i = 0; i < certificates.length; i++) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("X509Certificate[" + i + "]=" + certificates[i]);
-                }
-            }
-        }
-
-        if ((certificates != null) && (certificates.length == 1)) {
-            X509Certificate certificate = certificates[0];
-
-            try {
-                certificate.checkValidity();
-            } catch (CertificateException e) {
-                logger.error(e.toString());
-
-                return false;
-            }
-
-            return true;
-        } else {
-            return true;
-            // return this.standardTrustManager.isServerTrusted(certificates);
-        }
-    }
-
-    @Override
-    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-        // TODO Auto-generated method stub
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/1397bbb5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f446a2d..2def6d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,6 @@
         <commons-collections.version>3.2.1</commons-collections.version>
         <commons-io.version>2.4</commons-io.version>
         <commons-daemon.version>1.0.15</commons-daemon.version>
-        <commons-httpclient.version>3.1</commons-httpclient.version>
         <commons-email.version>1.1</commons-email.version>
         <commons-math3.version>3.6</commons-math3.version>
 
@@ -385,11 +384,6 @@
                 <version>${jackson.version}</version>
             </dependency>
             <dependency>
-                <groupId>commons-httpclient</groupId>
-                <artifactId>commons-httpclient</artifactId>
-                <version>${commons-httpclient.version}</version>
-            </dependency>
-            <dependency>
                 <groupId>org.apache.commons</groupId>
                 <artifactId>commons-email</artifactId>
                 <version>${commons-email.version}</version>
@@ -460,12 +454,11 @@
                 <artifactId>curator-recipes</artifactId>
                 <version>${curator.version}</version>
             </dependency>
-                <dependency>
-                      <groupId>org.apache.httpcomponents</groupId>
-                  <artifactId>httpclient</artifactId>
-                     <version>${apache-httpclient.version}</version>
-                  </dependency>
-
+            <dependency>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient</artifactId>
+                <version>${apache-httpclient.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.roaringbitmap</groupId>
                 <artifactId>RoaringBitmap</artifactId>