Référence factuelle : artefacts Maven publiés, modules Java exportés, annotations Jakarta REST 4.0 supportées, propriétés de configuration.

Artefacts Maven

Artefact Rôle

io.vidocq.cassini:cassini-api:0.2.0

SPI publique : HTTP/transport (CassiniHttpExchange, CassiniHttpAdapter, CassiniStack), BeanProvider, ResourceFactory, et la SPI de codegen (ResourceAdapter, RouteProvider, RouteDescriptor, InjectionSupport).

io.vidocq.cassini:cassini-core:0.2.0

Moteur JAX-RS (Invoker, ResourceScanner, RouteRegistry, MessageBodyRegistry, filtres, providers, SSE, multipart) + les générateurs d’adapters (RuntimeAdapterGenerator, AdapterRegistry).

io.vidocq.cassini:cassini-client:0.2.0

Client JAX-RS 4.0 — ClientBuilder zéro-dépendance sur java.net.http + virtual threads. Réutilise MessageBodyRegistry de cassini-core.

io.vidocq.cassini:cassini-cdi-vauban:0.2.0

Adapter BeanProvider qui résout les ressources via Vauban (BCE CassiniScopeExtension incluse).

io.vidocq.cassini:cassini-chappe:0.2.0

Transport de référence — branche Cassini sur Chappe (HTTP/1.1, H2, virtual threads). Utilisé pour le TCK.

io.vidocq.cassini:cassini-jdk-http:0.2.0

Transport JDK pur — com.sun.net.httpserver.HttpServer, zéro dépendance externe.

io.vidocq.cassini:cassini-processor:0.2.0

Processeur d’annotations APT — génère les sources CassiniAdapter+` / `+CassiniRoutes à la compilation. AOT-safe.

io.vidocq.cassini:cassini-maven-plugin:0.2.0

Plugin Maven (goal generate, lié à process-classes) — pré-génère les adapters pour les archives de dépendances externes.

io.vidocq.cassini:cassini-examples-*

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

cassini-tck n’est pas publié et est hors-reactor (POM modelVersion 4.0.0 standalone). Voir TCK — runner hors-reactor.

Modules Java 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

Aucun export public. internal.* est qualifié-exporté / ouvert uniquement à 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 n’expose pas son CassiniRuntimeDelegate via ServiceLoader — c’est volontaire pour éviter une collision avec le RuntimeDelegate du transport actif (cassini-chappe ou cassini-jdk-http).

Annotations supportées

@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 — voir TCK pour l’état M2h).

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

Interfaces JAX-RS implémentées

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).

Côté client (cassini-client) : Client, ClientBuilder, WebTarget, Invocation, Invocation.Builder, AsyncInvoker, ClientRequestContext, ClientResponseContext, ClientRequestFilter, ClientResponseFilter.

Configuration

Cassini se configure via SeBootstrap.Configuration (standard) ou via le builder CassiniStack.builder() (avancé) :

Propriété

Défaut

Description

host

0.0.0.0

Interface d’écoute du transport.

port

0 (auto)

Port HTTP. 0 = aléatoire libre.

rootPath

/

Préfixe de montage de l'`Application`.

protocol

HTTP

HTTP ou HTTPS (selon support transport).

Quand Cassini est piloté par Vidocq Runtime (extension vidocq-rest-cassini), deux propriétés MicroProfile Config supplémentaires :

Propriété

Défaut

Description

vidocq.rest.context-path

/

Préfixe de montage JAX-RS dans le serveur Vidocq.

vidocq.rest.listener

default

Listener Chappe cible.

Bugs et benchmarks

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

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