Skip to content

Commit e369681

Browse files
authored
Merge pull request #1330 from zhicwu/main
Extensible SSL context provider
2 parents 1fe1b66 + 380ab67 commit e369681

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 0.5.0
1+
## 0.4.5
22
### Breaking Changes
33
* refactor data processors and response classes to ensure input stream remain intact before first read:
44
- move ClickHouseSimpleRecord to com.clickhouse.data
@@ -8,6 +8,12 @@
88
### New Features
99
* disable SQL rewrite for DELETE statement in ClickHouse 23.3+
1010

11+
### Bug Fixes
12+
* Slow when using Apache Http Client. [#1320](https://github.com/ClickHouse/clickhouse-java/issues/1320)
13+
* ClickHouseResponse.getInputStream may return closed input stream.
14+
* ConcurrentModificationException may occure during deserialization. [#1327](https://github.com/ClickHouse/clickhouse-java/pull/1327)
15+
* ClickHouseSslContextProvider is not customizable. [#1329](https://github.com/ClickHouse/clickhouse-java/issues/1329)
16+
1117
## 0.4.4, 2023-04-17
1218
### Bug Fixes
1319
* flatten plugin 1.4.1 generated non-sense dependencies.

clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseSslContextProvider.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.clickhouse.client;
22

33
import java.util.Optional;
4+
import java.util.ServiceLoader;
5+
46
import javax.net.ssl.SSLException;
57

6-
import com.clickhouse.data.ClickHouseUtils;
8+
import com.clickhouse.data.ClickHouseChecker;
79

810
/**
9-
* This interface defines how to build Netty SSL context based on given
10-
* configuration and target server.
11+
* This interface defines how to build SSL context based on given configuration
12+
* and target server.
1113
*/
1214
public interface ClickHouseSslContextProvider {
1315
/**
@@ -16,7 +18,20 @@ public interface ClickHouseSslContextProvider {
1618
* @return non-null SSL context provider
1719
*/
1820
static ClickHouseSslContextProvider getProvider() {
19-
return ClickHouseUtils.getService(ClickHouseSslContextProvider.class);
21+
String packageName = ClickHouseSslContextProvider.class.getName();
22+
packageName = packageName.substring(0, packageName.lastIndexOf('.') + 1);
23+
ClickHouseSslContextProvider defaultProvider = null;
24+
for (ClickHouseSslContextProvider s : ServiceLoader.load(ClickHouseSslContextProvider.class,
25+
ClickHouseSslContextProvider.class.getClassLoader())) {
26+
if (s == null) {
27+
// impossible
28+
} else if (s.getClass().getName().startsWith(packageName)) {
29+
defaultProvider = s;
30+
} else {
31+
return s;
32+
}
33+
}
34+
return ClickHouseChecker.nonNull(defaultProvider, ClickHouseSslContextProvider.class.getSimpleName());
2035
}
2136

2237
/**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.clickhouse.client;
2+
3+
import org.testng.Assert;
4+
import org.testng.annotations.Test;
5+
6+
public class ClickHouseSslContextProviderTest {
7+
@Test(groups = { "unit" })
8+
public void testGetProvider() {
9+
Assert.assertNotNull(ClickHouseSslContextProvider.getProvider());
10+
Assert.assertEquals(ClickHouseSslContextProvider.getProvider().getClass(),
11+
ClickHouseSslContextProvider.getProvider().getClass());
12+
}
13+
}

0 commit comments

Comments
 (0)