Skip to content

Replace Apache HttpClient5 with Java's HttpURLConnection - #50319

Open
Moary Chen (moarychan) wants to merge 35 commits into
mainfrom
moarychan/replace-apache-http5-to-jdk-http-conn
Open

Replace Apache HttpClient5 with Java's HttpURLConnection#50319
Moary Chen (moarychan) wants to merge 35 commits into
mainfrom
moarychan/replace-apache-http5-to-jdk-http-conn

Conversation

@moarychan

@moarychan Moary Chen (moarychan) commented Sep 2, 2026

Copy link
Copy Markdown
Member

Description

Original PR is #50037

Additional cleanup

The PR also retains a small set of related, non-HTTP cleanup changes made while removing Apache HttpClient and Mockito:

  • Guard against a null key type before constructing a private key.
  • Load certificate aliases one at a time and stop after finding the requested alias.
  • Use JsonSerializable#toJsonString to simplify JSON serialization.
  • Simplify certificate file traversal and string construction.
  • Add package-private test seams and test clients needed after removing Mockito static and construction mocking.

These changes keep the nearby implementation and tests consistent with the dependency removal. They are not intended to change any supported public API.

All SDK Contribution checklist:

  • The pull request does not introduce [breaking changes]
  • CHANGELOG is updated for new features, bug fixes or other significant changes.
  • I have read the contribution guidelines.

General Guidelines and Best Practices

  • Title of the pull request is clear and informative.
  • There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

  • Pull request includes test coverage for the included changes.

# Conflicts:
#	sdk/keyvault/azure-security-keyvault-jca/pom.xml
#	sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/implementation/KeyVaultClient.java
#	sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/CertificateUtil.java
#	sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/HttpUtil.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreUnitTest.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/KeyVaultClientTest.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/certificates/KeyVaultCertificatesTest.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessEcSignatureTest.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsaSsaPssSignatureTest.java
#	sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/JsonConverterUtilTest.java
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
35 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@moarychan Moary Chen (moarychan) self-assigned this Sep 2, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It rewrites TLS, authentication, redirects, decompression, and certificate-download behavior across a security provider and needs final human validation.

Pull request overview

Replaces Apache HttpClient with JDK networking in the Key Vault JCA provider while removing related runtime and test dependencies.

Changes:

  • Implements HTTP, TLS, redirects, decompression, limits, and proxy support using HttpURLConnection.
  • Replaces Mockito/Byte Buddy usage with test seams and concrete doubles.
  • Updates certificate handling, samples, documentation, tests, and dependency metadata.
File summaries

jca/ denotes sdk/keyvault/azure-security-keyvault-jca/.

File Description
sdk/keyvault/cspell.yml Adds proxy-option vocabulary.
jca/src/test/java/com/azure/security/keyvault/jca/SpecificPathCertificatesTest.java Uses the platform separator.
jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java Migrates TLS tests to JDK APIs.
jca/src/test/java/com/azure/security/keyvault/jca/PropertyConvertorUtils.java Removes Azure Configuration usage.
jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreUnitTest.java Replaces construction mocking.
jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultEncodeTest.java Removes Byte Buddy utilities.
jca/src/test/java/com/azure/security/keyvault/jca/JreKeyStoreTest.java Migrates HTTPS testing.
jca/src/test/java/com/azure/security/keyvault/jca/JcaTestUtils.java Adds TLS test helpers.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/JsonConverterUtilTest.java Simplifies JSON assertions.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/HttpUtilTest.java Expands HTTP behavior coverage.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/HttpUtilConnectionTest.java Adds real local connection tests.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/external/BinaryHttpResponsePublicApiTest.java Tests response metadata access.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/AiaResponseCacheTest.java Replaces mocked certificates.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/utils/AccessTokenUtilTest.java Uses injectable HTTP seams.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/TestKeyVaultClient.java Adds a test HTTP client.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/TestCertificateVersions.java Adds certificate-version fixtures.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsaSsaPssSignatureTest.java Removes Mockito from PSS tests.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessEcSignatureTest.java Removes Mockito from EC tests.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/MockKeyVaultClient.java Adds a concrete client double.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/mocking/MockPublicKey.java Adds a public-key double.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/mocking/MockPrivateKey.java Adds a private-key double.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/mocking/MockKey.java Adds a key double.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/mocking/MockCertificate.java Adds a certificate double.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/JreKeyStoreTest.java Cleans up assertions.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/JreKeyStoreFactoryTest.java Simplifies type assertion.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/certificates/SpecificPathCertificatesTest.java Uses the platform separator.
jca/src/test/java/com/azure/security/keyvault/jca/implementation/certificates/ClasspathCertificatesTest.java Replaces certificate mocking.
jca/src/samples/java/com/azure/security/keyvault/jca/tls/ServerSSLSample.java Updates the TLS server sample.
jca/src/samples/java/com/azure/security/keyvault/jca/tls/ClientSSLSample.java Uses HttpsURLConnection.
jca/src/samples/java/com/azure/security/keyvault/jca/mtls/ServerMTLSSample.java Updates the mTLS server sample.
jca/src/samples/java/com/azure/security/keyvault/jca/mtls/ClientMTLSSample.java Uses JDK mTLS APIs.
jca/src/main/resources/module-info.java Updates module-descriptor guidance.
jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java Suppresses Provider deprecation.
jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java Registers signature algorithms directly.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/JsonConverterUtil.java Uses toJsonString.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/HttpUtil.java Implements JDK-based HTTP handling.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/CertificateUtil.java Simplifies certificate conversion.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/AiaCertificateChainUtil.java Adds an injectable AIA loader.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/utils/AccessTokenUtil.java Migrates authentication HTTP calls.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsaSsaPssSignature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsaSignature.java Applies formatting cleanup.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsa512Signature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessRsa256Signature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessEcSha512Signature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessEcSha384Signature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/signature/KeyVaultKeylessEcSha256Signature.java Exposes its algorithm constant.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/KeyVaultClient.java Adds HTTP seams and cleanup.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/certificates/SpecificPathCertificates.java Simplifies file traversal.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/certificates/KeyVaultCertificates.java Adds injection and alias loading changes.
jca/src/main/java/com/azure/security/keyvault/jca/implementation/certificates/ClasspathCertificates.java Simplifies resource discovery.
jca/README.md Updates samples and proxy guidance.
jca/pom.xml Removes Apache, SLF4J, and Mockito dependencies.
jca/CHANGELOG.md Records the HTTP migration.
Review details
  • Files reviewed: 56/56 changed files
  • Comments generated: 1
  • Review effort level: Balanced

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…hub.com:Azure/azure-sdk-for-java into moarychan/replace-apache-http5-to-jdk-http-conn
@moarychan
Moary Chen (moarychan) marked this pull request as ready for review September 3, 2026 08:20
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
35 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@moarychan Moary Chen (moarychan) added the azure-spring All azure-spring related issues label Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

azure-spring All azure-spring related issues azure-spring-jca KeyVault

Projects

Status: Untriaged
Status: In Progress

Development

Successfully merging this pull request may close these issues.

4 participants