diff --git a/ballerina-tests/http-advanced-tests/Ballerina.toml b/ballerina-tests/http-advanced-tests/Ballerina.toml index dfa1651449..5e49cc74cb 100644 --- a/ballerina-tests/http-advanced-tests/Ballerina.toml +++ b/ballerina-tests/http-advanced-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_advanced_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-advanced-tests/Dependencies.toml b/ballerina-tests/http-advanced-tests/Dependencies.toml index 1dc45dd342..379b13a451 100644 --- a/ballerina-tests/http-advanced-tests/Dependencies.toml +++ b/ballerina-tests/http-advanced-tests/Dependencies.toml @@ -82,7 +82,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -116,7 +116,7 @@ modules = [ [[package]] org = "ballerina" name = "http_advanced_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "crypto"}, {org = "ballerina", name = "file"}, @@ -136,7 +136,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-client-tests/Ballerina.toml b/ballerina-tests/http-client-tests/Ballerina.toml index 7c74c6e1ed..b0fec100cf 100644 --- a/ballerina-tests/http-client-tests/Ballerina.toml +++ b/ballerina-tests/http-client-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_client_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-client-tests/Dependencies.toml b/ballerina-tests/http-client-tests/Dependencies.toml index a83b0a78a2..f55418c6ff 100644 --- a/ballerina-tests/http-client-tests/Dependencies.toml +++ b/ballerina-tests/http-client-tests/Dependencies.toml @@ -82,7 +82,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -116,7 +116,7 @@ modules = [ [[package]] org = "ballerina" name = "http_client_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "constraint"}, {org = "ballerina", name = "data.jsondata"}, @@ -136,7 +136,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-dispatching-tests/Ballerina.toml b/ballerina-tests/http-dispatching-tests/Ballerina.toml index a4c762ca9d..76e26cdbd9 100644 --- a/ballerina-tests/http-dispatching-tests/Ballerina.toml +++ b/ballerina-tests/http-dispatching-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_dispatching_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-dispatching-tests/Dependencies.toml b/ballerina-tests/http-dispatching-tests/Dependencies.toml index f852fa37f0..0d82b8928f 100644 --- a/ballerina-tests/http-dispatching-tests/Dependencies.toml +++ b/ballerina-tests/http-dispatching-tests/Dependencies.toml @@ -79,7 +79,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -113,7 +113,7 @@ modules = [ [[package]] org = "ballerina" name = "http_dispatching_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "constraint"}, {org = "ballerina", name = "http"}, @@ -135,7 +135,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-interceptor-tests/Ballerina.toml b/ballerina-tests/http-interceptor-tests/Ballerina.toml index adf906c7f1..5bb564f04e 100644 --- a/ballerina-tests/http-interceptor-tests/Ballerina.toml +++ b/ballerina-tests/http-interceptor-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_interceptor_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-interceptor-tests/Dependencies.toml b/ballerina-tests/http-interceptor-tests/Dependencies.toml index c6ea0b7f42..fe63873914 100644 --- a/ballerina-tests/http-interceptor-tests/Dependencies.toml +++ b/ballerina-tests/http-interceptor-tests/Dependencies.toml @@ -76,7 +76,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -110,7 +110,7 @@ modules = [ [[package]] org = "ballerina" name = "http_interceptor_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "http"}, {org = "ballerina", name = "http_test_common"}, @@ -126,7 +126,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-misc-tests/Ballerina.toml b/ballerina-tests/http-misc-tests/Ballerina.toml index b8e223ca7e..f99867825e 100644 --- a/ballerina-tests/http-misc-tests/Ballerina.toml +++ b/ballerina-tests/http-misc-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_misc_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-misc-tests/Dependencies.toml b/ballerina-tests/http-misc-tests/Dependencies.toml index 2b5185e82c..b605d6a1a5 100644 --- a/ballerina-tests/http-misc-tests/Dependencies.toml +++ b/ballerina-tests/http-misc-tests/Dependencies.toml @@ -76,7 +76,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -110,7 +110,7 @@ modules = [ [[package]] org = "ballerina" name = "http_misc_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "http"}, {org = "ballerina", name = "http_test_common"}, @@ -129,7 +129,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-resiliency-tests/Ballerina.toml b/ballerina-tests/http-resiliency-tests/Ballerina.toml index 01590bf986..52fe6f3a09 100644 --- a/ballerina-tests/http-resiliency-tests/Ballerina.toml +++ b/ballerina-tests/http-resiliency-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_resiliency_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-resiliency-tests/Dependencies.toml b/ballerina-tests/http-resiliency-tests/Dependencies.toml index 649ed0422b..d224fe4292 100644 --- a/ballerina-tests/http-resiliency-tests/Dependencies.toml +++ b/ballerina-tests/http-resiliency-tests/Dependencies.toml @@ -76,7 +76,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -110,7 +110,7 @@ modules = [ [[package]] org = "ballerina" name = "http_resiliency_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "http"}, {org = "ballerina", name = "http_test_common"}, @@ -127,7 +127,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-security-tests/Ballerina.toml b/ballerina-tests/http-security-tests/Ballerina.toml index 6e2fc8d9e8..469a10f8a7 100644 --- a/ballerina-tests/http-security-tests/Ballerina.toml +++ b/ballerina-tests/http-security-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_security_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-security-tests/Dependencies.toml b/ballerina-tests/http-security-tests/Dependencies.toml index 9ccebaeebb..4649f8cccb 100644 --- a/ballerina-tests/http-security-tests/Dependencies.toml +++ b/ballerina-tests/http-security-tests/Dependencies.toml @@ -79,7 +79,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -113,7 +113,7 @@ modules = [ [[package]] org = "ballerina" name = "http_security_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "auth"}, {org = "ballerina", name = "http"}, @@ -131,7 +131,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-service-tests/Ballerina.toml b/ballerina-tests/http-service-tests/Ballerina.toml index 6d1d217700..6fa26169c6 100644 --- a/ballerina-tests/http-service-tests/Ballerina.toml +++ b/ballerina-tests/http-service-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http_service_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http-service-tests/Dependencies.toml b/ballerina-tests/http-service-tests/Dependencies.toml index edebe9e9e5..7a548f0dfc 100644 --- a/ballerina-tests/http-service-tests/Dependencies.toml +++ b/ballerina-tests/http-service-tests/Dependencies.toml @@ -79,7 +79,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -113,7 +113,7 @@ modules = [ [[package]] org = "ballerina" name = "http_service_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "file"}, {org = "ballerina", name = "http"}, @@ -132,7 +132,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina-tests/http-test-common/Ballerina.toml b/ballerina-tests/http-test-common/Ballerina.toml index d18dc7a237..0d6509f111 100644 --- a/ballerina-tests/http-test-common/Ballerina.toml +++ b/ballerina-tests/http-test-common/Ballerina.toml @@ -1,4 +1,4 @@ [package] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" diff --git a/ballerina-tests/http-test-common/Dependencies.toml b/ballerina-tests/http-test-common/Dependencies.toml index 4af3d6dfb7..89df43e907 100644 --- a/ballerina-tests/http-test-common/Dependencies.toml +++ b/ballerina-tests/http-test-common/Dependencies.toml @@ -70,7 +70,7 @@ dependencies = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "auth"}, {org = "ballerina", name = "cache"}, @@ -103,7 +103,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "http"}, {org = "ballerina", name = "lang.string"}, diff --git a/ballerina-tests/http2-tests/Ballerina.toml b/ballerina-tests/http2-tests/Ballerina.toml index 880f930c82..170ae9441d 100644 --- a/ballerina-tests/http2-tests/Ballerina.toml +++ b/ballerina-tests/http2-tests/Ballerina.toml @@ -1,17 +1,17 @@ [package] org = "ballerina" name = "http2_tests" -version = "2.13.3" +version = "2.13.4" [[dependency]] org = "ballerina" name = "http_test_common" repository = "local" -version = "2.13.3" +version = "2.13.4" [platform.java21] graalvmCompatible = true [[platform.java21.dependency]] scope = "testOnly" -path = "../../test-utils/build/libs/http-test-utils-2.13.3.jar" +path = "../../test-utils/build/libs/http-test-utils-2.13.4-SNAPSHOT.jar" diff --git a/ballerina-tests/http2-tests/Dependencies.toml b/ballerina-tests/http2-tests/Dependencies.toml index b3ccbeea8b..90164e9a47 100644 --- a/ballerina-tests/http2-tests/Dependencies.toml +++ b/ballerina-tests/http2-tests/Dependencies.toml @@ -79,7 +79,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -113,7 +113,7 @@ modules = [ [[package]] org = "ballerina" name = "http2_tests" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "file"}, {org = "ballerina", name = "http"}, @@ -132,7 +132,7 @@ modules = [ [[package]] org = "ballerina" name = "http_test_common" -version = "2.13.3" +version = "2.13.4" scope = "testOnly" dependencies = [ {org = "ballerina", name = "http"}, diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index e77098e5a2..52ce1557d0 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -1,7 +1,7 @@ [package] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" authors = ["Ballerina"] keywords = ["http", "network", "service", "listener", "client"] repository = "/~https://github.com/ballerina-platform/module-ballerina-http" @@ -20,8 +20,8 @@ graalvmCompatible = true [[platform.java21.dependency]] groupId = "io.ballerina.stdlib" artifactId = "http-native" -version = "2.13.3" -path = "../native/build/libs/http-native-2.13.3.jar" +version = "2.13.4" +path = "../native/build/libs/http-native-2.13.4-SNAPSHOT.jar" [[platform.java21.dependency]] groupId = "io.ballerina.stdlib" diff --git a/ballerina/CompilerPlugin.toml b/ballerina/CompilerPlugin.toml index 8a68b18ee7..9ff24473c2 100644 --- a/ballerina/CompilerPlugin.toml +++ b/ballerina/CompilerPlugin.toml @@ -3,7 +3,7 @@ id = "http-compiler-plugin" class = "io.ballerina.stdlib.http.compiler.HttpCompilerPlugin" [[dependency]] -path = "../compiler-plugin/build/libs/http-compiler-plugin-2.13.3.jar" +path = "../compiler-plugin/build/libs/http-compiler-plugin-2.13.4-SNAPSHOT.jar" [[dependency]] path = "../compiler-plugin/build/libs/ballerina-to-openapi-2.2.0.jar" diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml index 53fe07662b..b7ff9b9639 100644 --- a/ballerina/Dependencies.toml +++ b/ballerina/Dependencies.toml @@ -88,7 +88,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.13.3" +version = "2.13.4" dependencies = [ {org = "ballerina", name = "auth"}, {org = "ballerina", name = "cache"}, diff --git a/changelog.md b/changelog.md index 9f007c84e0..6d247a90d3 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,12 @@ This file contains all the notable changes done to the Ballerina HTTP package th The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Changed + +- [Move SSL context creation to the client initialization](/~https://github.com/ballerina-platform/ballerina-library/issues/1798) + ## [2.13.3] - 2025-02-20 ### Added diff --git a/native/src/main/java/io/ballerina/stdlib/http/api/client/endpoint/CreateSimpleHttpClient.java b/native/src/main/java/io/ballerina/stdlib/http/api/client/endpoint/CreateSimpleHttpClient.java index 1d622df8ec..aa25296964 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/api/client/endpoint/CreateSimpleHttpClient.java +++ b/native/src/main/java/io/ballerina/stdlib/http/api/client/endpoint/CreateSimpleHttpClient.java @@ -151,7 +151,7 @@ public static Object createSimpleHttpClient(BObject httpClient, BMap globalPoolC } HttpClientConnector httpClientConnector = HttpUtil.createHttpWsConnectionFactory() - .createHttpClientConnector(properties, senderConfiguration, poolManager); + .createHttpsClientConnector(properties, senderConfiguration, poolManager); httpClient.addNativeData(HttpConstants.CLIENT, httpClientConnector); httpClient.addNativeData(HttpConstants.CLIENT_ENDPOINT_SERVICE_URI, urlString); httpClient.addNativeData(HttpConstants.CLIENT_ENDPOINT_CONFIG, clientEndpointConfig); diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpClientConnector.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpClientConnector.java index c9cfa55539..3c00d11a37 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpClientConnector.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpClientConnector.java @@ -93,4 +93,11 @@ public interface HttpClientConnector { * @return returns the status of the asynchronous push response fetch action */ HttpResponseFuture getPushResponse(Http2PushPromise pushPromise); + + /** + * Initialize the SSL context. + * + * @throws Exception if an error occurs while initializing the SSL context. + */ + void initializeSSLContext() throws Exception; } diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpWsConnectorFactory.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpWsConnectorFactory.java index fe1d99a732..8b9f66d831 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpWsConnectorFactory.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/HttpWsConnectorFactory.java @@ -50,7 +50,18 @@ ServerConnector createServerConnector(ServerBootstrapConfiguration serverBootstr * @return HttpClientConnector. */ HttpClientConnector createHttpClientConnector(Map transportProperties, - SenderConfiguration senderConfiguration); + SenderConfiguration senderConfiguration); + + /** + * This method can be used to get http client connectors with SSL context initialized. + * + * @param transportProperties configTargetHandler stuff like global timeout, number of outbound connections, etc. + * @param senderConfiguration contains SSL configuration and endpoint details. + * @throws Exception if the connector creation fails. + * @return HttpClientConnector. + */ + HttpClientConnector createHttpsClientConnector(Map transportProperties, + SenderConfiguration senderConfiguration) throws Exception; /** * Creates a client connector with a given connection manager. @@ -61,7 +72,22 @@ HttpClientConnector createHttpClientConnector(Map transportPrope * @return the HttpClientConnector */ HttpClientConnector createHttpClientConnector(Map transportProperties, - SenderConfiguration senderConfiguration, ConnectionManager connectionManager); + SenderConfiguration senderConfiguration, + ConnectionManager connectionManager); + + + /** + * Creates a client connector with a given connection manager and SSL context. + * + * @param transportProperties Represents the configurations related to HTTP client + * @param senderConfiguration Represents the configurations related to client channel creation + * @param connectionManager Manages the client pool + * @throws Exception if the connector creation fails. + * @return the HttpClientConnector + */ + HttpClientConnector createHttpsClientConnector(Map transportProperties, + SenderConfiguration senderConfiguration, + ConnectionManager connectionManager) throws Exception; /** * This method is used to get WebSocket client connector. @@ -71,6 +97,16 @@ HttpClientConnector createHttpClientConnector(Map transportPrope */ WebSocketClientConnector createWsClientConnector(WebSocketClientConnectorConfig clientConnectorConfig); + /** + * This method is used to get WebSocket client connector with SSL context initialized. + * + * @param clientConnectorConfig Properties to create a client connector. + * @throws Exception if the connector creation fails. + * @return WebSocketClientConnector. + */ + WebSocketClientConnector createWsClientConnectorWithSSL(WebSocketClientConnectorConfig clientConnectorConfig) + throws Exception; + /** * Shutdown all the server channels and the accepted channels. It also shutdown all the eventloop groups. * @throws InterruptedException when interrupted by some other event diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/config/SslConfiguration.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/config/SslConfiguration.java index 23975cbc82..3ad3caf473 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/config/SslConfiguration.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/config/SslConfiguration.java @@ -20,6 +20,7 @@ import io.ballerina.stdlib.http.transport.contractimpl.common.Util; import io.ballerina.stdlib.http.transport.contractimpl.common.ssl.SSLConfig; +import io.netty.handler.ssl.SslContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -170,6 +171,10 @@ public void setSslHandshakeTimeOut(long handshakeTimeOut) { sslConfig.setHandshakeTimeOut(handshakeTimeOut); } + public void setSslContext(SslContext sslContext) { + sslConfig.setSslContext(sslContext); + } + public void disableSsl() { sslConfig.disableSsl(); } diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketClientConnector.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketClientConnector.java index e236ad4838..21dd1f41da 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketClientConnector.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketClientConnector.java @@ -30,4 +30,11 @@ public interface WebSocketClientConnector { * @return ClientHandshakeFuture for the newly created connection. */ ClientHandshakeFuture connect(); + + /** + * Initialize the SSL context. + * + * @throws Exception if an error occurs while initializing the SSL context. + */ + void initializeSSLContext() throws Exception; } diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorFuture.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorFuture.java index 0f9896d181..9b1674f1e1 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorFuture.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorFuture.java @@ -36,7 +36,7 @@ public interface WebSocketConnectorFuture { * @param webSocketHandshaker {@link WebSocketHandshaker} to notify connection initialization * @throws WebSocketConnectorException if any error occurred during the notification */ - void notifyWebSocketListener(WebSocketHandshaker webSocketHandshaker) throws WebSocketConnectorException; + void notifyWebSocketListener(WebSocketHandshaker webSocketHandshaker) throws Exception; /** * Notify incoming WebSocket text message for the listener. diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorListener.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorListener.java index 6c2757b5b3..e57e9f221e 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorListener.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contract/websocket/WebSocketConnectorListener.java @@ -30,7 +30,7 @@ public interface WebSocketConnectorListener { * * @param webSocketHandshaker {@link WebSocketHandshaker} to initialize connection. */ - void onHandshake(WebSocketHandshaker webSocketHandshaker); + void onHandshake(WebSocketHandshaker webSocketHandshaker) throws Exception; /** * Trigger incoming WebSocket text messages. diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpClientConnector.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpClientConnector.java index ac3fd9cdff..bc0c0a65a0 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpClientConnector.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpClientConnector.java @@ -60,6 +60,7 @@ import java.net.InetSocketAddress; import java.util.Calendar; import java.util.NoSuchElementException; +import java.util.Objects; import static io.ballerina.stdlib.http.transport.contract.Constants.OUTBOUND_ACCESS_LOG_MESSAGE; import static io.ballerina.stdlib.http.transport.contract.Constants.REMOTE_SERVER_CLOSED_BEFORE_INITIATING_OUTBOUND_REQUEST; @@ -392,4 +393,10 @@ private void initTargetChannelProperties(SenderConfiguration senderConfiguration this.sslConfig = senderConfiguration.getClientSSLConfig(); this.forwardedExtensionConfig = senderConfiguration.getForwardedExtensionConfig(); } + + public void initializeSSLContext() throws Exception { + if (Objects.nonNull(sslConfig)) { + sslConfig.initializeSSLContext(http2); + } + } } diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpWsConnectorFactory.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpWsConnectorFactory.java index 3d20456ee5..c599668046 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpWsConnectorFactory.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/DefaultHttpWsConnectorFactory.java @@ -156,6 +156,18 @@ public HttpClientConnector createHttpClientConnector(Map transpo configHashCode); } + @Override + public HttpClientConnector createHttpsClientConnector(Map transportProperties, + SenderConfiguration senderConfiguration) throws Exception { + BootstrapConfiguration bootstrapConfig = new BootstrapConfiguration(senderConfiguration); + ConnectionManager connectionManager = new ConnectionManager(senderConfiguration.getPoolConfiguration()); + int configHashCode = Util.getIntProperty(transportProperties, HttpConstants.CLIENT_CONFIG_HASH_CODE, 0); + HttpClientConnector httpClientConnector = new DefaultHttpClientConnector(connectionManager, + senderConfiguration, bootstrapConfig, clientGroup, configHashCode); + httpClientConnector.initializeSSLContext(); + return httpClientConnector; + } + @Override public HttpClientConnector createHttpClientConnector(Map transportProperties, SenderConfiguration senderConfiguration, @@ -166,11 +178,32 @@ public HttpClientConnector createHttpClientConnector(Map transpo configHashCode); } + @Override + public HttpClientConnector createHttpsClientConnector(Map transportProperties, + SenderConfiguration senderConfiguration, + ConnectionManager connectionManager) throws Exception { + BootstrapConfiguration bootstrapConfig = new BootstrapConfiguration(senderConfiguration); + int configHashCode = Util.getIntProperty(transportProperties, HttpConstants.CLIENT_CONFIG_HASH_CODE, 0); + HttpClientConnector httpClientConnector = new DefaultHttpClientConnector(connectionManager, + senderConfiguration, bootstrapConfig, clientGroup, configHashCode); + httpClientConnector.initializeSSLContext(); + return httpClientConnector; + } + @Override public WebSocketClientConnector createWsClientConnector(WebSocketClientConnectorConfig clientConnectorConfig) { return new DefaultWebSocketClientConnector(clientConnectorConfig, clientGroup); } + @Override + public WebSocketClientConnector createWsClientConnectorWithSSL( + WebSocketClientConnectorConfig clientConnectorConfig) throws Exception { + WebSocketClientConnector webSocketClientConnector = new DefaultWebSocketClientConnector(clientConnectorConfig, + clientGroup); + webSocketClientConnector.initializeSSLContext(); + return webSocketClientConnector; + } + @Override public void shutdown() throws InterruptedException { allChannels.close().sync(); diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/Util.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/Util.java index 046fc97991..f818543fad 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/Util.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/Util.java @@ -372,17 +372,14 @@ public static boolean shouldEnforceChunkingforHttpOneZero(ChunkConfig chunkConfi * @throws SSLException if any error occurs in the SSL connection */ public static SSLEngine configureHttpPipelineForSSL(SocketChannel socketChannel, String host, int port, - SSLConfig sslConfig) throws Exception { + SSLConfig sslConfig) { LOG.debug("adding ssl handler"); SSLEngine sslEngine = null; SslHandler sslHandler; ChannelPipeline pipeline = socketChannel.pipeline(); - SSLHandlerFactory sslHandlerFactory = new SSLHandlerFactory(sslConfig); if (sslConfig.isOcspStaplingEnabled()) { - sslHandlerFactory.createSSLContextFromKeystores(false); - ReferenceCountedOpenSslContext referenceCountedOpenSslContext = sslHandlerFactory - .buildClientReferenceCountedOpenSslContext(); - + ReferenceCountedOpenSslContext referenceCountedOpenSslContext = + sslConfig.getReferenceCountedOpenSslContext(); if (referenceCountedOpenSslContext != null) { sslHandler = referenceCountedOpenSslContext.newHandler(socketChannel.alloc()); sslEngine = sslHandler.engine(); @@ -395,11 +392,11 @@ public static SSLEngine configureHttpPipelineForSSL(SocketChannel socketChannel, sslEngine = createInsecureSslEngine(socketChannel, sslConfig, host, port); } else { if (sslConfig.getTrustStore() != null) { - sslHandlerFactory.createSSLContextFromKeystores(false); sslEngine = instantiateAndConfigSSL(sslConfig, host, port, - sslConfig.isHostNameVerificationEnabled(), sslHandlerFactory); + sslConfig.isHostNameVerificationEnabled(), sslConfig.getSslHandlerFactory()); } else { - sslEngine = getSslEngineForCerts(socketChannel, host, port, sslConfig, sslHandlerFactory); + sslEngine = getSslEngineForCerts(socketChannel, host, port, sslConfig, + sslConfig.getSslHandlerFactory()); } } sslHandler = new SslHandler(sslEngine); @@ -414,8 +411,8 @@ public static SSLEngine configureHttpPipelineForSSL(SocketChannel socketChannel, } private static SSLEngine getSslEngineForCerts(SocketChannel socketChannel, String host, int port, - SSLConfig sslConfig, SSLHandlerFactory sslHandlerFactory) throws SSLException { - SslContext sslContext = sslHandlerFactory.createHttpTLSContextForClient(); + SSLConfig sslConfig, SSLHandlerFactory sslHandlerFactory) { + SslContext sslContext = sslConfig.getSslContext(); SslHandler sslHandler = sslContext.newHandler(socketChannel.alloc(), host, port); SSLEngine sslEngine = sslHandler.engine(); sslHandlerFactory.addCommonConfigs(sslEngine); @@ -427,27 +424,8 @@ private static SSLEngine getSslEngineForCerts(SocketChannel socketChannel, Strin } private static SSLEngine createInsecureSslEngine(SocketChannel socketChannel, SSLConfig sslConfig, String host, - int port) throws Exception { - SslContext sslContext; - if (sslConfig.getKeyStore() != null && sslConfig.getKeyStorePass() != null) { - KeyStore ks = getKeyStore(sslConfig); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - kmf.init(ks, sslConfig.getCertPass() != null ? - sslConfig.getCertPass().toCharArray() : - sslConfig.getKeyStorePass().toCharArray()); - sslContext = SslContextBuilder.forClient().sslProvider(SslProvider.JDK) - .trustManager(InsecureTrustManagerFactory.INSTANCE) - .keyManager(kmf) - .build(); - } else if (sslConfig.getClientKeyFile() != null && sslConfig.getClientCertificates() != null) { - String keyPassword = sslConfig.getClientKeyPassword(); - sslContext = SslContextBuilder.forClient().sslProvider(SslProvider.JDK) - .keyManager(sslConfig.getClientCertificates(), sslConfig.getClientKeyFile(), keyPassword) - .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); - } else { - sslContext = SslContextBuilder.forClient().sslProvider(SslProvider.JDK) - .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); - } + int port) { + SslContext sslContext = sslConfig.getSslContext(); SslHandler sslHandler = sslContext.newHandler(socketChannel.alloc(), host, port); return sslHandler.engine(); } @@ -486,7 +464,29 @@ public static SslContext createInsecureSslEngineForHttp2(SSLConfig sslConfig) th return sslContextBuilder.build(); } - private static KeyStore getKeyStore(SSLConfig sslConfig) throws IOException { + public static SslContext createInsecureSslEngineForHttp(SSLConfig sslConfig) throws Exception { + if (sslConfig.getKeyStore() != null && sslConfig.getKeyStorePass() != null) { + KeyStore ks = getKeyStore(sslConfig); + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, sslConfig.getCertPass() != null ? + sslConfig.getCertPass().toCharArray() : + sslConfig.getKeyStorePass().toCharArray()); + return SslContextBuilder.forClient().sslProvider(SslProvider.JDK) + .trustManager(InsecureTrustManagerFactory.INSTANCE) + .keyManager(kmf) + .build(); + } else if (sslConfig.getClientKeyFile() != null && sslConfig.getClientCertificates() != null) { + String keyPassword = sslConfig.getClientKeyPassword(); + return SslContextBuilder.forClient().sslProvider(SslProvider.JDK) + .keyManager(sslConfig.getClientCertificates(), sslConfig.getClientKeyFile(), keyPassword) + .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); + } else { + return SslContextBuilder.forClient().sslProvider(SslProvider.JDK) + .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); + } + } + + public static KeyStore getKeyStore(SSLConfig sslConfig) throws IOException { String tlsStoreType = sslConfig.getTLSStoreType(); try (InputStream is = new FileInputStream(sslConfig.getKeyStore())) { KeyStore ks = KeyStore.getInstance(tlsStoreType); diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/ssl/SSLConfig.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/ssl/SSLConfig.java index ed9768ef73..42a90bd629 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/ssl/SSLConfig.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/common/ssl/SSLConfig.java @@ -18,10 +18,14 @@ */ package io.ballerina.stdlib.http.transport.contractimpl.common.ssl; +import io.ballerina.stdlib.http.transport.contractimpl.common.Util; +import io.netty.handler.ssl.ReferenceCountedOpenSslContext; +import io.netty.handler.ssl.SslContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.util.Objects; /** * A class that encapsulates SSLContext configuration. @@ -65,6 +69,9 @@ public class SSLConfig { private boolean disableSsl = false; private boolean useJavaDefaults = false; private String sniHostName; + private ReferenceCountedOpenSslContext referenceCountedOpenSslContext; + private SslContext sslContext; + private SSLHandlerFactory sslHandlerFactory; public SSLConfig() {} @@ -353,4 +360,63 @@ public boolean useJavaDefaults() { public void setUseJavaDefaults() { this.useJavaDefaults = true; } + + public void setSslContext(SslContext sslContext) { + this.sslContext = sslContext; + } + + public SslContext getSslContext() { + return sslContext; + } + + public ReferenceCountedOpenSslContext getReferenceCountedOpenSslContext() { + return referenceCountedOpenSslContext; + } + + public SSLHandlerFactory getSslHandlerFactory() { + return sslHandlerFactory; + } + + public void initializeSSLContext(boolean http2) throws Exception { + if (http2) { + initializeSSLContextForHTTP2(); + } else { + initializeSSLContextForHTTP(); + } + } + + private void initializeSSLContextForHTTP() throws Exception { + sslHandlerFactory = new SSLHandlerFactory(this); + if (isOcspStaplingEnabled()) { + sslHandlerFactory.createSSLContextFromKeystores(false); + referenceCountedOpenSslContext = sslHandlerFactory.buildClientReferenceCountedOpenSslContext(); + } else { + if (isDisableSsl()) { + sslContext = Util.createInsecureSslEngineForHttp(this); + } else { + if (this.getTrustStore() != null) { + sslHandlerFactory.createSSLContextFromKeystores(false); + } else { + sslContext = sslHandlerFactory.createHttpTLSContextForClient(); + } + } + } + } + + private void initializeSSLContextForHTTP2() throws Exception { + sslHandlerFactory = new SSLHandlerFactory(this); + if (isOcspStaplingEnabled()) { + referenceCountedOpenSslContext = (ReferenceCountedOpenSslContext) sslHandlerFactory. + createHttp2TLSContextForClient(isOcspStaplingEnabled()); + } else if (isDisableSsl()) { + sslContext = Util.createInsecureSslEngineForHttp2(this); + } else { + sslHandlerFactory.createSSLContextFromKeystores(false); + sslContext = sslHandlerFactory.createHttp2TLSContextForClient(false); + } + } + + public boolean hasSslCtxInitialized() { + return Objects.nonNull(sslHandlerFactory); + } } diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/listener/WebSocketServerHandshakeHandler.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/listener/WebSocketServerHandshakeHandler.java index 3d5dec8027..add682a920 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/listener/WebSocketServerHandshakeHandler.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/listener/WebSocketServerHandshakeHandler.java @@ -21,7 +21,6 @@ import io.ballerina.stdlib.http.transport.contract.Constants; import io.ballerina.stdlib.http.transport.contract.ServerConnectorFuture; -import io.ballerina.stdlib.http.transport.contract.websocket.WebSocketConnectorException; import io.ballerina.stdlib.http.transport.contractimpl.common.Util; import io.ballerina.stdlib.http.transport.contractimpl.websocket.message.DefaultWebSocketHandshaker; import io.ballerina.stdlib.http.transport.message.HttpCarbonRequest; @@ -159,7 +158,7 @@ public void channelInactive(ChannelHandlerContext ctx) { * @param fullHttpRequest {@link HttpRequest} of the request. */ private void handleWebSocketHandshake(FullHttpRequest fullHttpRequest, ChannelHandlerContext ctx) - throws WebSocketConnectorException { + throws Exception { DefaultWebSocketHandshaker webSocketHandshaker = new DefaultWebSocketHandshaker(ctx, serverConnectorFuture, fullHttpRequest); diff --git a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/sender/HttpClientChannelInitializer.java b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/sender/HttpClientChannelInitializer.java index 643bdab594..da3a526c33 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/sender/HttpClientChannelInitializer.java +++ b/native/src/main/java/io/ballerina/stdlib/http/transport/contractimpl/sender/HttpClientChannelInitializer.java @@ -91,7 +91,6 @@ public class HttpClientChannelInitializer extends ChannelInitializer(), getSenderConfigs()); + httpClientConnector = httpConnectorFactory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private ListenerConfiguration getListenerConfiguration() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/DisableSslTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/DisableSslTest.java index 2d91e87d1a..cc01aecf83 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/DisableSslTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/DisableSslTest.java @@ -49,7 +49,7 @@ public class DisableSslTest { private HttpWsConnectorFactory connectorFactory; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { HttpWsConnectorFactory factory = new DefaultHttpWsConnectorFactory(); serverConnector = factory @@ -60,7 +60,7 @@ public void setup() throws InterruptedException { connectorFactory = new DefaultHttpWsConnectorFactory(); http2ClientConnector = connectorFactory - .createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + .createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } public static SenderConfiguration getSenderConfigs() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2AlpnWithCertsTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2AlpnWithCertsTest.java index ad01fe98e6..33bf62e3f5 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2AlpnWithCertsTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2AlpnWithCertsTest.java @@ -51,7 +51,7 @@ public class Http2AlpnWithCertsTest { private HttpWsConnectorFactory connectorFactory; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { HttpWsConnectorFactory factory = new DefaultHttpWsConnectorFactory(); serverConnector = factory @@ -61,7 +61,7 @@ public void setup() throws InterruptedException { future.sync(); connectorFactory = new DefaultHttpWsConnectorFactory(); - httpClientConnector = connectorFactory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = connectorFactory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } @Test diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2MutualSslTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2MutualSslTest.java index 792671fd8a..eb0beb1b9c 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2MutualSslTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/Http2MutualSslTest.java @@ -51,7 +51,7 @@ public class Http2MutualSslTest { private HttpWsConnectorFactory connectorFactory; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { HttpWsConnectorFactory factory = new DefaultHttpWsConnectorFactory(); serverConnector = factory @@ -62,7 +62,7 @@ public void setup() throws InterruptedException { connectorFactory = new DefaultHttpWsConnectorFactory(); http2ClientConnector = connectorFactory - .createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + .createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private SenderConfiguration getSenderConfigs() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/TestHttp2WithALPN.java b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/TestHttp2WithALPN.java index 6e8f1986b2..bc563a1af8 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/TestHttp2WithALPN.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/http2/ssl/TestHttp2WithALPN.java @@ -51,7 +51,7 @@ public class TestHttp2WithALPN { private HttpWsConnectorFactory connectorFactory; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { HttpWsConnectorFactory factory = new DefaultHttpWsConnectorFactory(); serverConnector = factory @@ -62,9 +62,9 @@ public void setup() throws InterruptedException { connectorFactory = new DefaultHttpWsConnectorFactory(); http2ClientConnector = connectorFactory - .createHttpClientConnector(new HashMap<>(), getSenderConfigs(HTTP_2_0)); + .createHttpsClientConnector(new HashMap<>(), getSenderConfigs(HTTP_2_0)); http1ClientConnector = connectorFactory - .createHttpClientConnector(new HashMap<>(), getSenderConfigs(String.valueOf(HTTP_1_1))); + .createHttpsClientConnector(new HashMap<>(), getSenderConfigs(String.valueOf(HTTP_1_1))); } /** diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuitesTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuitesTest.java index 2526722364..692f0df642 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuitesTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuitesTest.java @@ -87,7 +87,7 @@ public static Object[][] cipherSuites() { */ @Test(dataProvider = "ciphers") public void setup(String clientCiphers, String serverCiphers, boolean hasException, int serverPort) - throws InterruptedException { + throws Exception { Parameter paramClientCiphers = new Parameter("ciphers", clientCiphers); clientParams = new ArrayList<>(); @@ -104,7 +104,7 @@ public void setup(String clientCiphers, String serverCiphers, boolean hasExcepti future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); testCiphersuites(hasException, serverPort); serverConnector.stop(); diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuiteswithCertsTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuiteswithCertsTest.java index 3f4a0550c0..a039d8da4a 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuiteswithCertsTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/CipherSuiteswithCertsTest.java @@ -83,7 +83,7 @@ public static Object[][] cipherSuites() { */ @Test(dataProvider = "ciphers") public void setup(String clientCiphers, String serverCiphers, boolean hasException, int serverPort) - throws InterruptedException { + throws Exception { Parameter paramClientCiphers = new Parameter("ciphers", clientCiphers); clientParams.add(paramClientCiphers); @@ -101,7 +101,7 @@ public void setup(String clientCiphers, String serverCiphers, boolean hasExcepti future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); testCiphersuitesWithCertsAndKeys(hasException, serverPort); serverConnector.stop(); diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/HttpsInvalidServerCertificateTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/HttpsInvalidServerCertificateTest.java index e90a8c224a..6a8b57feb5 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/HttpsInvalidServerCertificateTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/HttpsInvalidServerCertificateTest.java @@ -56,7 +56,7 @@ public class HttpsInvalidServerCertificateTest { private String testValue = "Test Message"; @BeforeClass - public void setup() { + public void setup() throws Exception { httpsServer = TestUtil.startHttpsServer(TestUtil.HTTPS_SERVER_PORT, new MockServerInitializer(testValue, TEXT_PLAIN, 200)); @@ -68,7 +68,7 @@ public void setup() { senderConfiguration.setHostNameVerificationEnabled(false); senderConfiguration.setScheme(HTTPS_SCHEME); connectorFactory = new DefaultHttpWsConnectorFactory(); - httpClientConnector = connectorFactory.createHttpClientConnector(new HashMap<>(), senderConfiguration); + httpClientConnector = connectorFactory.createHttpsClientConnector(new HashMap<>(), senderConfiguration); } @Test diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLTestCase.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLTestCase.java index 0f98e6716d..433fd20c06 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLTestCase.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLTestCase.java @@ -50,7 +50,7 @@ public class MutualSSLTestCase { private ServerConnector connector; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { factory = new DefaultHttpWsConnectorFactory(); @@ -62,7 +62,7 @@ public void setup() throws InterruptedException { future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private ListenerConfiguration getListenerConfiguration() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLwithCertsTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLwithCertsTest.java index 425e1eb6dd..e3fcbf2bb6 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLwithCertsTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/MutualSSLwithCertsTest.java @@ -49,7 +49,7 @@ public class MutualSSLwithCertsTest { private ServerConnector connector; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { factory = new DefaultHttpWsConnectorFactory(); @@ -60,7 +60,7 @@ public void setup() throws InterruptedException { future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private ListenerConfiguration getListenerConfiguration() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/OptionalMutualSSLTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/OptionalMutualSSLTest.java index 42906fa665..8a02e4d25a 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/OptionalMutualSSLTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/OptionalMutualSSLTest.java @@ -51,7 +51,7 @@ public class OptionalMutualSSLTest { private ServerConnector connector; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { factory = new DefaultHttpWsConnectorFactory(); ListenerConfiguration listenerConfiguration = getListenerConfiguration(); @@ -62,7 +62,7 @@ public void setup() throws InterruptedException { future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private ListenerConfiguration getListenerConfiguration() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsTest.java index 62c4d7769d..032e6f27fa 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsTest.java @@ -85,7 +85,7 @@ public static Object[][] cipherSuites() { */ @Test(dataProvider = "protocols") public void setup(String clientProtocol, String serverProtocol, boolean hasException, int serverPort) - throws InterruptedException { + throws Exception { Parameter clientprotocols = new Parameter("sslEnabledProtocols", clientProtocol); clientParams = new ArrayList<>(); @@ -104,7 +104,7 @@ public void setup(String clientProtocol, String serverProtocol, boolean hasExcep future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = httpWsConnectorFactory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = httpWsConnectorFactory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); testSSLProtocols(hasException, serverPort); serverConnector.stop(); diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsWithCertsTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsWithCertsTest.java index 914d5b6e3e..3a27fc20c6 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsWithCertsTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/SSLProtocolsWithCertsTest.java @@ -83,7 +83,7 @@ public static Object[][] cipherSuites() { */ @Test(dataProvider = "protocols") public void setup(String clientProtocol, String serverProtocol, boolean hasException, int serverPort) - throws InterruptedException { + throws Exception { Parameter clientprotocols = new Parameter("sslEnabledProtocols", clientProtocol); clientParams.add(clientprotocols); @@ -101,7 +101,7 @@ public void setup(String clientProtocol, String serverProtocol, boolean hasExcep future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = httpWsConnectorFactory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = httpWsConnectorFactory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); testSSLProtocols(hasException, serverPort); serverConnector.stop(); diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/https/ServerCloseConnectionDuringSslTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/https/ServerCloseConnectionDuringSslTest.java index 9f89d8bd7f..5c1262b333 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/https/ServerCloseConnectionDuringSslTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/https/ServerCloseConnectionDuringSslTest.java @@ -57,7 +57,7 @@ public class ServerCloseConnectionDuringSslTest { private DefaultHttpConnectorListener listener; @BeforeClass - public void setup() { + public void setup() throws Exception { givenServerThatClosesConnection(); givenANormalHttpsClient(); } @@ -115,9 +115,9 @@ private SenderConfiguration getSenderConfigs() { return senderConfiguration; } - private void givenANormalHttpsClient() { + private void givenANormalHttpsClient() throws Exception { factory = new DefaultHttpWsConnectorFactory(); - httpClientConnector = factory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = factory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private void givenServerThatClosesConnection() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/passthrough/PassthroughHttpsMessageProcessorListener.java b/native/src/test/java/io/ballerina/stdlib/http/transport/passthrough/PassthroughHttpsMessageProcessorListener.java index 6dffa6ef01..340f83b108 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/passthrough/PassthroughHttpsMessageProcessorListener.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/passthrough/PassthroughHttpsMessageProcessorListener.java @@ -69,10 +69,10 @@ public void onMessage(HttpCarbonMessage httpRequestMessage) { try { if (shareConnectionPool && connectionManager != null) { clientConnector = httpWsConnectorFactory - .createHttpClientConnector(new HashMap<>(), senderConfiguration, connectionManager); + .createHttpsClientConnector(new HashMap<>(), senderConfiguration, connectionManager); } else { clientConnector = httpWsConnectorFactory - .createHttpClientConnector(new HashMap<>(), senderConfiguration); + .createHttpsClientConnector(new HashMap<>(), senderConfiguration); } HttpResponseFuture future = clientConnector.send(outboundRequest); future.setHttpConnectorListener(new HttpConnectorListener() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/pkcs/PKCSTest.java b/native/src/test/java/io/ballerina/stdlib/http/transport/pkcs/PKCSTest.java index 03dab8b7dd..ff443060ed 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/pkcs/PKCSTest.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/pkcs/PKCSTest.java @@ -49,7 +49,7 @@ public class PKCSTest { private ServerConnector serverConnector; @BeforeClass - public void setup() throws InterruptedException { + public void setup() throws Exception { httpConnectorFactory = new DefaultHttpWsConnectorFactory(); ListenerConfiguration listenerConfiguration = getListenerConfiguration(); @@ -59,7 +59,7 @@ public void setup() throws InterruptedException { future.setHttpConnectorListener(new EchoMessageListener()); future.sync(); - httpClientConnector = httpConnectorFactory.createHttpClientConnector(new HashMap<>(), getSenderConfigs()); + httpClientConnector = httpConnectorFactory.createHttpsClientConnector(new HashMap<>(), getSenderConfigs()); } private ListenerConfiguration getListenerConfiguration() { diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeFailureTestCase.java b/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeFailureTestCase.java index 19055988ea..7dcfe2225b 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeFailureTestCase.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeFailureTestCase.java @@ -94,7 +94,7 @@ private WebSocketClientConnectorConfig getWebSocketClientConnectorConfigWithSSL( @Test public void testClientConnectionWithSSL() throws Throwable { WebSocketClientConnector webSocketClientConnector = - httpConnectorFactory.createWsClientConnector(getWebSocketClientConnectorConfigWithSSL()); + httpConnectorFactory.createWsClientConnectorWithSSL(getWebSocketClientConnectorConfigWithSSL()); CountDownLatch countDownLatch = new CountDownLatch(1); AtomicReference webSocketConnectionAtomicReference = new AtomicReference<>(); AtomicReference throwableAtomicReference = new AtomicReference<>(); diff --git a/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeSuccessfulTestCase.java b/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeSuccessfulTestCase.java index b30b762122..e7c6884be0 100644 --- a/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeSuccessfulTestCase.java +++ b/native/src/test/java/io/ballerina/stdlib/http/transport/websocket/ssl/WebSocketSSLHandshakeSuccessfulTestCase.java @@ -91,7 +91,7 @@ private WebSocketClientConnectorConfig getWebSocketClientConnectorConfigWithSSL( @Test public void testClientConnectionWithSSL() throws Throwable { WebSocketClientConnector webSocketClientConnector = - httpConnectorFactory.createWsClientConnector(getWebSocketClientConnectorConfigWithSSL()); + httpConnectorFactory.createWsClientConnectorWithSSL(getWebSocketClientConnectorConfigWithSSL()); CountDownLatch countDownLatch = new CountDownLatch(1); AtomicReference webSocketConnectionAtomicReference = new AtomicReference<>(); AtomicReference throwableAtomicReference = new AtomicReference<>();