This page lists every artefact published by Cyrano, the Java modules they export, the MicroProfile Rest Client 4.0 annotations supported, and the full set of MicroProfile Config keys recognised.
Maven artefacts
| Artefact | Recommended scope | Role |
|---|---|---|
|
|
Explicit Java Modules repackage of |
|
|
Controlled re-export of the spec + stable public SPI ( |
|
annotation processor path (or |
APT processor |
|
|
Implementation: |
|
|
Vauban BCE |
|
|
Official MicroProfile Rest Client 4.0 TCK runner — invoked through |
cyrano-tck is in-reactor, gated behind the tck Maven profile (TCK harmonisation, vidocq-runtime-tck-* pattern): a plain mvn install neither downloads nor runs anything TCK-related. The historical out-of-reactor constraint (ShrinkWrap Maven Resolver 3.3 vs Model 4.1.0 POMs) disappeared with the Maven 3.9.16 / Model 4.0.0 migration. See TCK.
|
Exported Java modules
| Module | Exported packages |
|---|---|
|
|
|
|
|
No exported package — consumed exclusively through |
|
|
|
|
Supported annotations
| Annotation | Spec / Level |
|---|---|
|
MP Rest Client §6.1 — registers the interface with CDI. |
|
MP Rest Client §6.2 — injection qualifier. |
|
MP Rest Client §5 — declares a provider. |
|
Repeating container of |
|
MP Rest Client §4 — static or dynamic header ( |
|
MP Rest Client §4 — |
|
Repeating container of |
|
JAX-RS — HTTP method + path template. Custom verbs meta-annotated with |
|
JAX-RS — parameters. |
|
JAX-RS — content negotiation (request side / response side). |
Supported return types
| Type | Semantics |
|---|---|
Primitives and their wrappers |
Conversion from the text body or JSON-B types. |
|
Raw decoded body (charset = |
POJO / record |
JSON-B deserialisation through Champollion. |
|
Present if status < 400 and body non-empty; |
|
JSON-B deserialisation. |
|
Access to status, headers and raw body. |
|
Async through |
|
Server-sent events (MP Rest Client 4.0). Needs the Reactive Streams dependency: see Reactive Streams for |
|
The response is consumed and discarded. |
Reactive Streams for Publisher NEW
cyrano-core declares org.reactivestreams:reactive-streams as an optional dependency, and its descriptor says requires static org.reactivestreams: a Rest Client application does not get the jar, and links with jlink. That jar has no module descriptor, only an Automatic-Module-Name, and jlink refuses automatic modules (jlink does not support automatic modules: org.reactivestreams); until 0.3.0 it came with cyrano-core into every application, so none of them could be linked.
An application whose client methods return Publisher declares the dependency itself:
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
<version>1.0.4</version>
</dependency>
Such an application cannot be linked with jlink until an explicit org.reactivestreams module exists; it runs on the module path as usual.
MicroProfile Config keys
All keys follow the <key>/mp-rest/<attribute> pattern, where <key> is either the declared configKey (@RegisterRestClient(configKey = "x")) or the interface’s FQN (when no configKey is set).
| Key | Effect |
|---|---|
|
Base URL (host + base path). Medium priority. |
|
Full base URI. High priority (wins over |
|
CDI scope of the synthesised bean ( |
|
Comma-separated list of provider FQNs. |
|
Connect timeout in milliseconds. |
|
Read timeout in milliseconds. |
|
|
|
|
|
Truststore location — |
|
Truststore type (default |
|
Truststore password. |
|
Client keystore location — |
|
Keystore type (default |
|
Keystore password. |
|
FQN of a |
Each key resolves against the interface FQN first, then the configKey. The global (non-per-client) property microprofile.rest.client.disable.default.mapper (spec §8.1) is also read from MP Config; an explicit builder property wins.
HTTP proxying is configured programmatically through RestClientBuilder.proxyAddress(host, port) — no proxy* MP Config key is read.
Resolution priority for the base URL (strongest to weakest): mp-rest/uri > mp-rest/url > @RegisterRestClient(baseUri=…). Other attributes have a single priority (MP Config wins over the builder’s defaults).
Public SPI
Two stable SPI packages are exported by cyrano-api, plus one runtime SPI in cyrano-core:
| Type | Role |
|---|---|
|
Implementation metadata constants ( |
|
The contract implemented by every APT-generated |
|
The invocation contract a generated proxy delegates to; implemented by |
|
Literal, reflection-free description of the client interface embedded in the generated code; converted back to internal |
|
Provider instantiation SPI ( |
|
The spec’s |
There is no transport-substitution SPI: the transport is java.net.http.HttpClient, and the extension points around a request are the standard JAX-RS/MP providers (ClientRequestFilter, ClientResponseFilter, MessageBodyReader/Writer, ResponseExceptionMapper, ParamConverterProvider, ClientHeadersFactory).
Runtime prerequisites
-
JDK 25+ — for the Class-File API and virtual threads.
-
Java Modules: one
module-info.javaper application Maven module consuming Cyrano. -
The Jakarta REST API NEW —
providedin every Cyrano jar: the Vidocq Rest Client extension brings it, and so does an application server. -
A JSON-B implementation: Champollion. The Vidocq Rest Client extension brings it NEW; elsewhere, declare one (
runtimescope) or use the server’s. -
Optional — an MP Config implementation (Ravel) for
<key>/mp-rest/*.
Other CDI containers NEW
Cyrano does not need Vauban. The jars run unchanged under another CDI container, and two integration-test modules, grouped under cyrano-it-other-containers, prove it on every build (cyrano#34):
| Module | What it runs |
|---|---|
|
Weld SE 6.0 (CDI 4.1), class path, no Vauban, Ravel for MicroProfile Config, Champollion for JSON-B: an |
|
A WAR on Open Liberty 26.0.0.10, MicroProfile 7 distribution (CDI 4.0, Jakarta REST 3.1, JSON-B 3.0, MicroProfile Config 3.1), with Liberty’s |
Neither module is published. Nothing in Cyrano is tied to Vauban: cyrano-cdi-vauban registers the @RestClient beans through a standard build compatible extension, and has no normal-scoped bean.
|
Deploying on an application server
|
Utility scripts
| Script | Effect |
|---|---|
|
Build the reactor (no TCK). |
|
Unit tests (cyrano-api, cyrano-core, cyrano-cdi-vauban). |
|
Smoke mode (fast). |
|
Full official TCK suite. |
|
Targeted TCK test. |