Skip to content

Propose OpenSpec change: JDK HttpClient-based ApiClient transport - #893

Merged
thibauult merged 2 commits into
finos:mainfrom
thibauult:jdk-httpclient-transport-proposal
Aug 12, 2026
Merged

Propose OpenSpec change: JDK HttpClient-based ApiClient transport#893
thibauult merged 2 commits into
finos:mainfrom
thibauult:jdk-httpclient-transport-proposal

Conversation

@thibauult

@thibauult thibauult commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

  • Proposes a new symphony-bdk-http-jdk module implementing the BDK ApiClient/ApiClientBuilder contract on top of java.net.http.HttpClient, giving consumers a zero-third-party-dependency alternative to the existing jersey2/webclient implementations.
  • Full behavioral parity with symphony-bdk-http-jersey2 (param encoding, JSON serialization, tracing headers, file downloads, TLS/proxy config, retry-compatible exception translation), with two documented, deliberate gaps (read-timeout mapping, filter chain narrowing) called out explicitly.
  • Purely additive: no changes to symphony-bdk-http-api contracts or existing modules; Spring Boot starter wiring is explicitly out of scope for this change.

This is an OpenSpec proposal only (openspec/changes/jdk-httpclient-transport/) — no implementation code yet.

Test plan

  • Review proposal/design/spec/tasks for completeness and alignment with existing module patterns
  • On approval, implementation will follow via openspec-apply-change

Adds a third symphony-bdk-http implementation on top of java.net.http.HttpClient,
giving consumers a zero-third-party-dependency alternative to jersey2/webclient.
…(D12)

symphony-bdk-http-jersey2 carries the largest dependency/CVE surface for a
filter-chain benefit nothing in the codebase uses. Make the new jdk module
the documented default for symphony-bdk-core and mark jersey2's public
classes @API(DEPRECATED) as a soft, non-removing signal — no functional
change, no forced migration.

@symphony-enrico symphony-enrico 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.

LGTM !

@thibauult
thibauult merged commit 46b327e into finos:main Aug 12, 2026
3 checks passed
@thibauult
thibauult deleted the jdk-httpclient-transport-proposal branch August 12, 2026 09:54
thibauult added a commit that referenced this pull request Aug 12, 2026
… transport (#894)

* Propose OpenSpec change: JDK HttpClient-based ApiClient transport (#893)

* Propose OpenSpec change: JDK HttpClient-based ApiClient transport

Adds a third symphony-bdk-http implementation on top of java.net.http.HttpClient,
giving consumers a zero-third-party-dependency alternative to jersey2/webclient.

* Deprecate jersey2's default status in favor of symphony-bdk-http-jdk (D12)

symphony-bdk-http-jersey2 carries the largest dependency/CVE surface for a
filter-chain benefit nothing in the codebase uses. Make the new jdk module
the documented default for symphony-bdk-core and mark jersey2's public
classes @API(DEPRECATED) as a soft, non-removing signal — no functional
change, no forced migration.

* Add symphony-bdk-http-jdk module, a java.net.http.HttpClient-based ApiClient

Implements the OpenSpec change jdk-httpclient-transport: a third ApiClient
implementation with zero third-party HTTP dependencies, becoming the new
documented default for symphony-bdk-core. symphony-bdk-http-jersey is
deprecated (soft, non-removing @API status change) in that role but keeps
shipping unchanged.

* Address PR review nits on JDK HttpClient transport

- Document ClassCastException risk in addFilter due to generics erasure
- Wrap InvalidPathException from file.toPath() in ApiException for multipart uploads
- Normalize slashes between basePath and path when building request URIs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants