This module is part of the Apache Sling project.
The Sling API defines an extension to the Jakarta Servlet API 6.0 to provide access to content and unified access to request parameters, hiding differences between transfer methods from client to server.
The Sling API bundle does not include a Servlet API implementation. Servlet APIs must be provided by the runtime (Servlet container or another bundle). The module includes both javax.servlet and jakarta.servlet API dependencies with provided scope to support both API families.
Common Maven commands:
mvn clean install- build and run testsmvn clean install -DskipTests- build without testsmvn test- run unit testsmvn test -Dtest=SlingUriBuilderTest- run a single test classmvn spotless:check- run formatting checksmvn spotless:apply- apply formattingmvn verify- run verification including OSGi baseline checksmvn apache-rat:check- verify license headers
Sling API 3.x adds Jakarta Servlet API support while keeping compatibility paths for existing javax.servlet-based usages. In most cases, upgrading is a drop-in replacement, with some migration considerations described below.
Because the API now references Jakarta Servlet types in public signatures, most projects should add jakarta.servlet:jakarta.servlet-api (for example 6.1.0) in addition to any existing javax.servlet dependency that is still needed.
At runtime, use a container that implements Jakarta Servlet API 6+ (for example Apache Felix Http Jetty 12).
Sling API 3.x requires Java 17 at runtime.
Some APIs now have both javax and jakarta overloads. Passing null as an argument can cause ambiguous method resolution at compile time. These methods are not intended to accept null; update calling code accordingly instead of casting null.
Sling API 3.x uses Jakarta Servlet API as its base. Previous releases were based on javax.servlet (Servlet API 3). While compatibility APIs remain available, new code should target Jakarta types.
In most cases, migration is a search/replace exercise, but deprecated APIs may require explicit refactoring.
The following table lists common replacements:
| Feature | Servlet API 3 | Jakarta Servlet API 6 |
|---|---|---|
| Package Prefix | javax.servlet |
jakarta.servlet |
| Request interface | SlingHttpServletRequest |
SlingJakartaHttpServletRequest |
| Response interface | SlingHttpServletResponse |
SlingJakartaHttpServletResponse |
| Request event | SlingRequestEvent |
SlingJakartaRequestEvent |
| Request listener | SlingRequestListener |
SlingJakartaRequestListener |
| Request builder | SlingHttpServletRequestBuilder.build() |
SlingHttpServletRequestBuilder.buildJakartaRequest() |
| Response builder | SlingHttpServletResponseBuilder.build() |
SlingHttpServletResponseBuilder.buildJakartaResponseResult() |
| Response builder result | SlingHttpServletResponseResult |
SlingJakartaHttpServletResponseResult |
| Media range | MediaRangeList |
JakartaMediaRangeList |
| Error handling | ErrorHandler |
JakartaErrorHandler |
| Opt-in servlet | OptingServlet |
JakartaOptingServlet |
| Method servlets | SlingSafeMethodsServlet / SlingAllMethodsServlet |
SlingJakartaSafeMethodsServlet / SlingJakartaAllMethodsServlet |
| Request/response wrappers | SlingHttpServletRequestWrapper / SlingHttpServletResponseWrapper |
SlingJakartaHttpServletRequestWrapper / SlingJakartaHttpServletResponseWrapper |
Additional migration notes:
SlingBindingsandSlingScriptHelperprovide Jakarta request/response methods (getJakartaRequest(),getJakartaResponse(), related setters/bindings).- Wrapper APIs now consistently expose the wrapped object via
getWrappedObject().
