Factual reference: published Maven artefacts, exported JPMS modules, supported Jakarta REST 4.0 annotations, configuration properties.

Maven artefacts

Artefact Role

io.vidocq.cassini:cassini-api:0.1.0-SNAPSHOT

Public SPI: HTTP/transport (CassiniHttpExchange, CassiniHttpAdapter, CassiniStack), BeanProvider, ResourceFactory, and the codegen SPI (ResourceAdapter, RouteProvider, RouteDescriptor, InjectionSupport).

io.vidocq.cassini:cassini-core:0.1.0-SNAPSHOT

JAX-RS engine (Invoker, ResourceScanner, RouteRegistry, MessageBodyRegistry, filters, providers, SSE, multipart) + the adapter generators (RuntimeAdapterGenerator, AdapterRegistry).

io.vidocq.cassini:cassini-client:0.1.0-SNAPSHOT

JAX-RS Client 4.0 — zero-dependency ClientBuilder on java.net.http + virtual threads. Reuses MessageBodyRegistry from cassini-core.

io.vidocq.cassini:cassini-cdi-vauban:0.1.0-SNAPSHOT

BeanProvider adapter that resolves resources through Vauban (BCE CassiniScopeExtension included).

io.vidocq.cassini:cassini-chappe:0.1.0-SNAPSHOT

Reference transport — wires Cassini onto Chappe (HTTP/1.1, H2, virtual threads). Used for the TCK.

io.vidocq.cassini:cassini-jdk-http:0.1.0-SNAPSHOT

Pure JDK transport — com.sun.net.httpserver.HttpServer, no external dependency.

io.vidocq.cassini:cassini-processor:0.1.0-SNAPSHOT

APT annotation processor — generates CassiniAdapter+` / `+CassiniRoutes sources at compile time. AOT-safe.

io.vidocq.cassini:cassini-maven-plugin:0.1.0-SNAPSHOT

Maven plugin (generate goal, bound to process-classes) — pre-generates adapters for external dependency archives.

io.vidocq.cassini:cassini-examples-*

Examples: cassini-examples-chappe (standard SE-Bootstrap), cassini-examples-jdkhttp (direct CassiniStack), cassini-examples-vauban (CDI + SE-Bootstrap).

cassini-tck is not published and is out-of-reactor (standalone modelVersion 4.0.0 POM). See TCK — out-of-reactor runner.

JPMS modules

Module Exports / Provides

io.vidocq.cassini.api

exports io.vidocq.cassini.spi.http;
exports io.vidocq.cassini.spi.resource;
exports io.vidocq.cassini.spi.bean;
exports io.vidocq.cassini.spi.gen;
uses io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory;
uses io.vidocq.cassini.spi.bean.BeanProvider.Factory;

io.vidocq.cassini.core

No public export. internal.* is qualified-exported / opened only to cassini.tck, cassini.client, cassini.maven.plugin, cassini.chappe, cassini.jdkhttp.

provides io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory
    with io.vidocq.cassini.internal.CassiniStackBuilderFactory;

io.vidocq.cassini.chappe

exports io.vidocq.cassini.chappe;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.chappe.ChappeRuntimeDelegate;

io.vidocq.cassini.jdkhttp

exports io.vidocq.cassini.jdkhttp;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.jdkhttp.JdkHttpRuntimeDelegate;

io.vidocq.cassini.cdi.vauban

exports io.vidocq.cassini.cdi.vauban;
provides io.vidocq.cassini.spi.bean.BeanProvider.Factory
    with ...VaubanBeanProviderFactory;
provides ...build.compatible.spi.BuildCompatibleExtension
    with ...CassiniScopeExtension;

io.vidocq.cassini.client

requires io.vidocq.cassini.core, java.net.http;
provides jakarta.ws.rs.client.ClientBuilder
    with ...CassiniClientBuilder;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with ...CassiniClientRuntimeDelegate;
uses jakarta.ws.rs.core.Feature;

io.vidocq.cassini.processor

exports io.vidocq.cassini.processor;
provides javax.annotation.processing.Processor
    with ...CassiniResourceProcessor;
cassini-core deliberately does not expose its CassiniRuntimeDelegate via ServiceLoader — to avoid a collision with the RuntimeDelegate from the active transport (cassini-chappe or cassini-jdk-http).

Supported annotations

@Path, @GET, @POST, @PUT, @DELETE, @PATCH, @HEAD, @OPTIONS, @HttpMethod, @ApplicationPath, @Produces, @Consumes, @PathParam, @QueryParam, @HeaderParam, @CookieParam, @FormParam, @MatrixParam, @BeanParam, @DefaultValue, @Encoded, @Provider, @Priority, @NameBinding, @PreMatching, @Context, @Suspended (async — see TCK for M2h status).

CDI (with cassini-cdi-vauban): @ApplicationScoped, @RequestScoped, @Singleton, @Inject.

Implemented JAX-RS interfaces

Application, SeBootstrap, Configuration, Configurable, UriInfo, Request, HttpHeaders, SecurityContext, Providers, MessageBodyReader, MessageBodyWriter, ContextResolver, ExceptionMapper, ContainerRequestFilter, ContainerResponseFilter, ReaderInterceptor, WriterInterceptor, DynamicFeature, Feature, Sse, SseEventSink, SseBroadcaster, AsyncResponse, CompletionCallback, ConnectionCallback, EntityPart, EntityPart.Builder (multipart §3.5.4).

Client side (cassini-client): Client, ClientBuilder, WebTarget, Invocation, Invocation.Builder, AsyncInvoker, ClientRequestContext, ClientResponseContext, ClientRequestFilter, ClientResponseFilter.

Configuration

Cassini is configured via SeBootstrap.Configuration (standard) or via the CassiniStack.builder() builder (advanced):

Property

Default

Description

host

0.0.0.0

Transport listening interface.

port

0 (auto)

HTTP port. 0 = random free.

rootPath

/

Mount prefix for the Application.

protocol

HTTP

HTTP or HTTPS (depending on transport support).

When Cassini is driven by Vidocq Runtime (the vidocq-rest-cassini extension), two extra MicroProfile Config properties:

Property

Default

Description

vidocq.rest.context-path

/

JAX-RS mount prefix in the Vidocq server.

vidocq.rest.listener

default

Target Chappe listener.

Bugs and benchmarks

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BUG.md[BUG.md] — reproducible issues.

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BENCH.md[BENCH.md] — JMH/wrk vs RESTEasy / Jersey / Helidon.