Jersey core server implementation for building RESTful Web Services with JAX-RS.
npx @tessl/cli install tessl/maven-org-glassfish-jersey-core--jersey-server@3.1.0Jersey Server is the core server implementation component of Eclipse Jersey, a comprehensive JAX-RS (Jakarta RESTful Web Services 3.1) reference implementation framework. This library provides essential server-side functionality for building RESTful web services in Java, including resource configuration, request/response processing, content negotiation, dependency injection through HK2, validation support, and extensible provider mechanisms.
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>3.1.10</version>
</dependency>import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ApplicationHandler;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.ContainerResponse;import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ApplicationHandler;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
// Define a simple resource
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello() {
return "Hello, World!";
}
}
// Configure and initialize Jersey server
ResourceConfig config = new ResourceConfig();
config.register(HelloWorldResource.class);
// Create application handler for request processing
ApplicationHandler app = new ApplicationHandler(config);
// Enable package scanning for resources
ResourceConfig scanConfig = new ResourceConfig();
scanConfig.packages("com.example.resources");
// Register multiple resources at once
ResourceConfig multiConfig = new ResourceConfig();
multiConfig.registerClasses(HelloWorldResource.class, OtherResource.class);Jersey Server is built around several key architectural components:
Primary configuration class for Jersey server applications, providing resource registration, property management, package scanning, and feature configuration. Essential for setting up any Jersey server application.
public class ResourceConfig extends Application
implements Configurable<ResourceConfig>, ServerConfig, ApplicationSupplier {
// Constructors
public ResourceConfig();
public ResourceConfig(Set<Class<?>> classes);
public ResourceConfig(Class<?>... classes);
public ResourceConfig(ResourceConfig original);
// Resource registration
public ResourceConfig register(Class<?> componentClass);
public ResourceConfig register(Object component);
public ResourceConfig registerClasses(Set<Class<?>> classes);
public ResourceConfig registerClasses(Class<?>... classes);
// Package scanning
public ResourceConfig packages(String... packages);
public ResourceConfig packages(boolean recursive, String... packages);
// Property management
public ResourceConfig property(String name, Object value);
public ResourceConfig setProperties(Map<String, ?> properties);
}Core request processing functionality including the main application handler, container request/response objects, and lifecycle management. Handles the complete request flow from HTTP input to JAX-RS resource method execution.
public final class ApplicationHandler {
public ApplicationHandler(Application application);
public ApplicationHandler(Class<? extends Application> applicationClass);
public Future<ContainerResponse> apply(ContainerRequest requestContext);
public Future<ContainerResponse> apply(ContainerRequest requestContext,
OutputStream entityStream);
}
public class ContainerRequest extends InboundMessageContext
implements ContainerRequestContext {
public ContainerRequest(URI baseUri, URI requestUri, String httpMethod,
SecurityContext securityContext, PropertiesDelegate propertiesDelegate);
}
public class ContainerResponse implements ContainerResponseContext {
public ContainerResponse(ContainerRequest requestContext, Response response);
}Runtime representation and processing of JAX-RS resources, including model validation, method invocation, and parameter handling. Provides complete metadata about resources and their methods for routing and execution.
public final class ResourceModel implements ResourceModelComponent {
public static Builder builder();
public Set<Resource> getResources();
public Set<ResourceModel> getSubResourceModels();
}
public interface ModelProcessor {
ResourceModel processResourceModel(ResourceModel resourceModel, Configuration configuration);
ResourceModel processSubResource(ResourceModel subResourceModel, Configuration configuration);
}
public class Parameter extends org.glassfish.jersey.model.Parameter implements AnnotatedElement {
public Source getSource();
public String getSourceName();
public boolean hasDefaultValue();
public String getDefaultValue();
}Server-side asynchronous request processing including async contexts, chunked output, broadcasting, and managed async execution. Enables scalable handling of long-running operations and streaming responses.
public interface AsyncContext extends AsyncResponse {
ContainerRequest getContainerRequest();
ContainerResponse getContainerResponse();
}
public class ChunkedOutput<T> extends GenericType<T> implements Closeable {
public ChunkedOutput(Type chunkType);
public boolean isClosed();
public void write(T chunk) throws IOException;
public void close() throws IOException;
}
public final class Broadcaster<T> implements BroadcasterListener<T> {
public static <T> Broadcaster<T> createOnly(Class<T> chunkType);
public void add(ChunkedOutput<T> chunkedOutput);
public boolean remove(ChunkedOutput<T> chunkedOutput);
public void broadcast(T chunk);
}Extension points for container integration, component management, request scoping, validation, and lifecycle management. Enables deep customization of Jersey server behavior and integration with external frameworks.
public interface Container {
void reload();
void reload(ResourceConfig configuration);
ApplicationHandler getApplicationHandler();
ResourceConfig getConfiguration();
}
public interface ContainerProvider {
<T> T createContainer(Class<T> type, Application application);
}
public interface ComponentProvider extends org.glassfish.jersey.spi.ComponentProvider {
void initialize(InjectionManager injectionManager);
}
public interface ExternalRequestScope<T> extends AutoCloseable {
ExternalRequestContext<T> open();
}Comprehensive monitoring system with application-level and request-level event handling, statistics collection, JMX integration, and performance metrics. Provides detailed insights into application performance and behavior.
public interface ApplicationEventListener {
void onEvent(ApplicationEvent event);
RequestEventListener onRequest(RequestEvent requestEvent);
}
public interface MonitoringStatistics {
ExecutionStatistics getRequestStatistics();
ResponseStatistics getResponseStatistics();
Map<String, ResourceStatistics> getUriStatistics();
Map<Class<?>, ExceptionMapperStatistics> getExceptionMapperStatistics();
}
public interface ExecutionStatistics {
long getTimeWindowSize();
TimeUnit getTimeWindowSizeUnit();
TimeWindowStatistics getTimeWindowStatistics();
}Web Application Description Language (WADL) generation and configuration for automatic API documentation. Provides machine-readable descriptions of RESTful web services.
public interface WadlApplicationContext {
Application getApplication();
Grammars getGrammars();
void setWadlGenerationEnabled(boolean wadlGenerationEnabled);
}
public interface WadlGenerator {
Application createApplication();
Resources createResources();
Resource createResource(org.glassfish.jersey.server.model.Resource resource, String path);
}
public class WadlFeature implements Feature {
public boolean configure(FeatureContext context);
}Server configuration constants for customizing Jersey server behavior including provider scanning, feature control, validation settings, and performance tuning options.
public final class ServerProperties {
// Provider scanning
public static final String PROVIDER_PACKAGES = "jersey.config.server.provider.packages";
public static final String PROVIDER_SCANNING_RECURSIVE = "jersey.config.server.provider.scanning.recursive";
public static final String PROVIDER_CLASSPATH = "jersey.config.server.provider.classpath";
// Feature control
public static final String FEATURE_AUTO_DISCOVERY_DISABLE = "jersey.config.server.disableAutoDiscovery";
public static final String WADL_FEATURE_DISABLE = "jersey.config.server.wadl.disableWadl";
public static final String BV_FEATURE_DISABLE = "jersey.config.beanValidation.disable.server";
// Advanced configuration
public static final String OUTBOUND_CONTENT_LENGTH_BUFFER = "jersey.config.server.contentLength.buffer";
public static final String REDUCE_CONTEXT_PATH_SLASHES_ENABLED = "jersey.config.server.reduceContextPathSlashesEnabled";
}