Apache Sling Default GET Servlets

Clone this repo:
  1. 0f63863 Add security section to AGENTS.md by Robert Munteanu · 2 weeks ago master
  2. 85d574b docs: update AGENTS.md and README.md with accurate project details (#23) by Carsten Ziegeler · 2 weeks ago
  3. 2760b74 docs: add AGENTS.md, CLAUDE.md, and expand README (#22) by Carsten Ziegeler · 2 weeks ago
  4. 660e37f build(deps): update sling-bundle-parent to version 66 (#20) by Carsten Ziegeler · 3 weeks ago
  5. 20cf1b8 SLING-12866 - Restrict force pushes, auto-delete branches on merge by Robert Munteanu · 10 months ago

Apache Sling

Build Status Test Status Coverage Sonarcloud Status JavaDoc Maven Central servlets License

Apache Sling Default GET Servlets

This module is part of the Apache Sling project.

This bundle provides Sling's default GET and HEAD servlet implementations for:

  • HTML rendering
  • Plain-text rendering
  • JSON rendering
  • XML rendering
  • Binary stream delivery
  • Redirect handling (jcr:content resources)
  • Sling runtime info and JCR version info endpoints

Requirements

  • Java 17
  • Maven 3.9+

Build and test

# Build shaded bundle and sources
mvn clean package

# Run unit/integration tests
mvn test

# Run a single test class
mvn test -Dtest=JsonRendererServletTest

# Run a single test method
mvn test -Dtest=JsonRendererServletTest#testMethod

# Check or apply formatting (Spotless via sling-bundle-parent)
mvn spotless:check
mvn spotless:apply

# Verify license headers
mvn apache-rat:check

# Install locally without tests
mvn install -DskipTests

To deploy to a running Sling instance:

mvn sling:install

Build artifacts

  • The package phase produces the deployable shaded bundle:
    • target/org.apache.sling.servlets.get-<version>.jar
  • Original (pre-shade) artifacts are also generated:
    • target/original-org.apache.sling.servlets.get-<version>.jar
  • Source JARs are generated for both shaded and original variants.

Implementation notes

  • Uses OSGi R7 Declarative Services annotations (org.osgi.service.component.annotations).
  • Uses OSGi Metatype annotations (org.osgi.service.metatype.annotations) for servlet configuration.
  • Uses Jakarta Servlet (jakarta.servlet) and Jakarta JSON (jakarta.json) APIs.
  • Targets Sling API 3.x (SlingJakartaHttpServletRequest / SlingJakartaHttpServletResponse).
  • Produces a shaded JAR at package time.
  • Relocates org.apache.jackrabbit.util to org.apache.sling.servlets.get.impl.jackrabbit and inlines ISO8601.
  • Keeps javax.jcr imports optional in bnd.bnd for environments without JCR packages.
  • Uses SLF4J (org.slf4j) for logging.

Project layout

pom.xml                    Maven build descriptor
bnd.bnd                    OSGi import and inlined resource instructions
src/
  main/java/org/apache/sling/servlets/get/impl/
    DefaultGetServlet.java      Dispatcher for GET/HEAD by selector/extension
    RedirectServlet.java        Redirect handling
    SlingInfoServlet.java       Sling runtime info endpoint
    VersionInfoServlet.java     JCR version info endpoint
    helpers/
      Renderer.java
      HtmlRenderer.java
      JsonRenderer.java
      PlainTextRenderer.java
      XMLRenderer.java
      StreamRenderer.java
      HeadServletResponse.java
    util/
      JsonObjectCreator.java
      JsonToText.java
      ResourceTraversor.java
  test/java/...                 JUnit 4 + Mockito + Sling Mock tests
  test/resources/               JSON fixtures (for example `data.json`, `samplefile.json`)