This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-engine.git
The following commit(s) were added to refs/heads/master by this push:
new af7a9aa SLING-12607 : Implement Jakarta Servlet based Sling API
af7a9aa is described below
commit af7a9aa1e2e10fc50401d0a045ab512ef38fe51e
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri May 30 07:07:07 2025 +0200
SLING-12607 : Implement Jakarta Servlet based Sling API
---
.../sling/engine/impl/DefaultErrorHandler.java | 1 +
.../impl/SlingJakartaHttpServletRequestImpl.java | 2 +
.../impl/SlingJakartaHttpServletResponseImpl.java | 1 -
.../engine/impl/SlingRequestProcessorImpl.java | 2 +
.../impl/adapter/EngineErrorHandlerTracker.java | 1 +
.../engine/impl/filter/ServletFilterManager.java | 1 +
.../engine/impl/helper/RequestListenerManager.java | 2 +
.../engine/impl/log/RequestLogServiceFacade.java | 1 +
.../sling/engine/impl/log/RequestLoggerFilter.java | 1 +
.../engine/impl/log/RequestLoggerService.java | 4 ++
.../engine/impl/parameters/ParameterSupport.java | 13 ++--
.../sling/engine/impl/request/RequestData.java | 79 +++++++++++++++++++---
.../org/apache/sling/engine/ResponseUtilTest.java | 13 +++-
13 files changed, 102 insertions(+), 19 deletions(-)
diff --git
a/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
b/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
index 73f0ebd..8320bf2 100644
--- a/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
+++ b/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
@@ -63,6 +63,7 @@ public class DefaultErrorHandler implements
JakartaErrorHandler {
this.serverInfo = (serverInfo != null) ? serverInfo :
ProductInfoProvider.PRODUCT_NAME;
}
+ @SuppressWarnings("deprecation")
public synchronized void setDelegate(final ServiceReference<?> ref, final
ErrorHandler eh) {
if (eh != null) {
this.errorHandler = new JakartaErrorHandler() {
diff --git
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
index f4a0a77..a187fd3 100644
---
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
+++
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
@@ -77,6 +77,7 @@ public class SlingJakartaHttpServletRequestImpl extends
HttpServletRequestWrappe
private static final List<String> FORWARD_ATTRIBUTES = Arrays.asList(
FORWARD_CONTEXT_PATH, FORWARD_PATH_INFO, FORWARD_QUERY_STRING,
FORWARD_REQUEST_URI, FORWARD_SERVLET_PATH);
+ @SuppressWarnings("deprecation")
private static final List<String> INCLUDE_ATTRIBUTES = Arrays.asList(
SlingConstants.ATTR_REQUEST_CONTENT,
SlingConstants.ATTR_REQUEST_SERVLET,
@@ -398,6 +399,7 @@ public class SlingJakartaHttpServletRequestImpl extends
HttpServletRequestWrappe
// ---------- Attribute handling -----------------------------------
+ @SuppressWarnings("deprecation")
@Override
public Object getAttribute(final String name) {
final DispatchingInfo dispatchingInfo =
this.requestData.getDispatchingInfo();
diff --git
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
index b9e7b11..763f5fa 100644
---
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
+++
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
@@ -40,7 +40,6 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletResponseWrapper;
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingJakartaHttpServletResponse;
-import
org.apache.sling.engine.impl.SlingJakartaHttpServletResponseImpl.WriterAlreadyClosedException;
import org.apache.sling.engine.impl.request.RequestData;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
diff --git
a/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
b/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
index 4c7cd08..905e139 100644
--- a/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
+++ b/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
@@ -175,6 +175,7 @@ public class SlingRequestProcessorImpl implements
SlingRequestProcessor {
this.errorHandler.setDelegate(ref, (JakartaErrorHandler) null);
}
+ @SuppressWarnings("deprecation")
@Reference(
name = "ErrorHandler",
cardinality = ReferenceCardinality.OPTIONAL,
@@ -184,6 +185,7 @@ public class SlingRequestProcessorImpl implements
SlingRequestProcessor {
this.errorHandler.setDelegate(ref, handler);
}
+ @SuppressWarnings("deprecation")
void unsetErrorHandler(final ErrorHandler handler, final
ServiceReference<?> ref) {
this.errorHandler.setDelegate(ref, (ErrorHandler) null);
}
diff --git
a/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
b/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
index e53f45b..b19f121 100644
---
a/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
+++
b/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
@@ -32,6 +32,7 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
+@Deprecated
@Component
public class EngineErrorHandlerTracker {
diff --git
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
index cd33633..22e59f0 100644
---
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
+++
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
@@ -151,6 +151,7 @@ public class ServletFilterManager {
destroyFilter(reference, service);
}
+ @SuppressWarnings("deprecation")
@Reference(
service = javax.servlet.Filter.class,
updated = "updatedJavaxFilter",
diff --git
a/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
b/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
index 357fe2e..4ccc28a 100644
---
a/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
+++
b/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
@@ -53,6 +53,7 @@ public class RequestListenerManager {
cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC,
fieldOption = FieldOption.REPLACE)
+ @SuppressWarnings("deprecation")
private volatile List<SlingRequestListener> listeners;
@Reference(
@@ -68,6 +69,7 @@ public class RequestListenerManager {
this.servletContext = servletContext;
}
+ @SuppressWarnings("deprecation")
public void sendEvent(final HttpServletRequest request, final
SlingJakartaRequestEvent.EventType type) {
final List<SlingJakartaRequestListener> local = jakartaListeners;
if (local != null && !local.isEmpty()) {
diff --git
a/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
b/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
index 3c723bf..fac063d 100644
---
a/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
+++
b/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
@@ -40,6 +40,7 @@ import org.osgi.util.tracker.ServiceTracker;
* values, if multi-valued) must be the service name.</li>
* </ol>
*/
+@SuppressWarnings("deprecation")
class RequestLogServiceFacade implements RequestLog {
// The service tracker used to access the service(s)
diff --git
a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
index aba341a..0f6f9bd 100644
--- a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
+++ b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
@@ -75,6 +75,7 @@ public final class RequestLoggerFilter implements Filter {
}
}
+ @SuppressWarnings("deprecation")
@Override
public void destroy() {
FileRequestLog.dispose();
diff --git
a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
index c5cdd92..2f77fc0 100644
--- a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
+++ b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
@@ -101,6 +101,7 @@ public class RequestLoggerService {
private CustomLogFormat logFormat;
+ @SuppressWarnings("deprecation")
private RequestLog log;
/**
@@ -130,6 +131,7 @@ public class RequestLoggerService {
}
}
+ @SuppressWarnings("deprecation")
@Deactivate
void shutdown() {
if (this.log != null) {
@@ -140,6 +142,7 @@ public class RequestLoggerService {
this.logFormat = null;
}
+ @SuppressWarnings("deprecation")
void log(RequestLoggerRequest request, RequestLoggerResponse response) {
if (this.log != null && this.logFormat != null) {
this.log.write(this.logFormat.format(request, response));
@@ -150,6 +153,7 @@ public class RequestLoggerService {
return this.onEntry;
}
+ @SuppressWarnings("deprecation")
private RequestLog getLog(BundleContext bundleContext, String output, int
outputType) {
switch (outputType) {
case OUTPUT_TYPE_FILE:
diff --git
a/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
b/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
index 05e3daa..32c8100 100644
---
a/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
+++
b/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
@@ -394,15 +394,16 @@ public class ParameterSupport {
}
private void parseMultiPartPost(ParameterMap parameters) {
-
// Create a new file upload handler
- JakartaServletDiskFileUpload upload = new
JakartaServletDiskFileUpload();
+ final JakartaServletDiskFileUpload upload = new
JakartaServletDiskFileUpload();
upload.setSizeMax(ParameterSupport.maxRequestSize);
upload.setFileSizeMax(ParameterSupport.maxFileSize);
- upload.setFileItemFactory(DiskFileItemFactory.builder()
- .setBufferSize(ParameterSupport.fileSizeThreshold)
- .setPath(ParameterSupport.location.toPath())
- .get());
+ final DiskFileItemFactory.Builder fileItemFactoryBuilder =
DiskFileItemFactory.builder();
+
fileItemFactoryBuilder.setBufferSize(ParameterSupport.fileSizeThreshold);
+ if (ParameterSupport.location != null) {
+ fileItemFactoryBuilder.setPath(ParameterSupport.location.toPath());
+ }
+ upload.setFileItemFactory(fileItemFactoryBuilder.get());
upload.setFileCountMax(ParameterSupport.maxFileCount);
RequestContext rc = new
JakartaServletRequestContext(this.getServletRequest()) {
@Override
diff --git
a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
index 774d853..ab64350 100644
--- a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
+++ b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
@@ -49,8 +49,6 @@ import org.apache.sling.api.request.builder.Builders;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.ServletResolver;
-import org.apache.sling.api.wrappers.JakartaToJavaxRequestWrapper;
-import org.apache.sling.api.wrappers.JakartaToJavaxResponseWrapper;
import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
import org.apache.sling.api.wrappers.JavaxToJakartaResponseWrapper;
import org.apache.sling.api.wrappers.SlingJakartaHttpServletRequestWrapper;
@@ -300,6 +298,7 @@ public class RequestData {
* <code>ServletRequestWrapper</code> wrapping a
* <code>SlingJakartaHttpServletRequest</code>.
*/
+ @SuppressWarnings("deprecation")
public static SlingJakartaHttpServletRequest unwrap(ServletRequest
request) {
// early check for most cases
@@ -316,6 +315,33 @@ public class RequestData {
return (SlingJakartaHttpServletRequest) request;
}
}
+ // javax to jakarta wrapper?
+ if (request instanceof
org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) {
+ javax.servlet.ServletRequest req =
+
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper)
request).getRequest();
+ while (req instanceof javax.servlet.ServletRequestWrapper) {
+ req = ((javax.servlet.ServletRequestWrapper) req).getRequest();
+ }
+ if (req instanceof
org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) {
+ return
unwrap(((org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper)
req).getRequest());
+ }
+ // check for usage of builder
+ if (req instanceof SlingHttpServletRequest) {
+ // we start again at the top javax request
+ req =
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper)
request).getRequest();
+ do {
+ if (req instanceof SlingHttpServletRequest) {
+ return
JavaxToJakartaRequestWrapper.toJakartaRequest((SlingHttpServletRequest) req);
+ }
+ if (req instanceof javax.servlet.ServletRequestWrapper) {
+ req = ((javax.servlet.ServletRequestWrapper)
req).getRequest();
+ } else {
+ req = null;
+ }
+ } while (req != null);
+ }
+ throw new IllegalArgumentException("ServletRequest not wrapping
SlingJakartaHttpServletRequest: " + req);
+ }
// if we unwrapped everything and did not find a
// SlingJakartaHttpServletRequest, we lost
@@ -338,13 +364,15 @@ public class RequestData {
}
// javax to jakarta wrapper?
- if (request instanceof JavaxToJakartaRequestWrapper) {
- javax.servlet.ServletRequest req = ((JavaxToJakartaRequestWrapper)
request).getRequest();
+ if (request instanceof
org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) {
+ javax.servlet.ServletRequest req =
+
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper)
request).getRequest();
while (req instanceof javax.servlet.ServletRequestWrapper) {
req = ((javax.servlet.ServletRequestWrapper) req).getRequest();
}
- if (req instanceof JakartaToJavaxRequestWrapper) {
- final ServletRequest r = ((JakartaToJavaxRequestWrapper)
req).getRequest();
+ if (req instanceof
org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) {
+ final ServletRequest r =
+
((org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper)
req).getRequest();
if (r instanceof SlingJakartaHttpServletRequest) {
return unwrap((SlingJakartaHttpServletRequest) r);
}
@@ -369,6 +397,7 @@ public class RequestData {
* <code>ServletResponseWrapper</code> wrapping a
* <code>SlingJakartaHttpServletResponse</code>.
*/
+ @SuppressWarnings("deprecation")
public static SlingJakartaHttpServletResponse unwrap(ServletResponse
response) {
// early check for most cases
@@ -386,6 +415,34 @@ public class RequestData {
}
}
+ // javax to jakarta wrapper?
+ if (response instanceof
org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) {
+ javax.servlet.ServletResponse res =
+
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper)
response).getResponse();
+ while (res instanceof javax.servlet.ServletResponseWrapper) {
+ res = ((javax.servlet.ServletResponseWrapper)
res).getResponse();
+ }
+ if (res instanceof
org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) {
+ return
unwrap(((org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper)
res).getResponse());
+ }
+ // check for usage of builder
+ if (res instanceof SlingHttpServletResponse) {
+ // we start again at the top javax response
+ res =
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper)
response).getResponse();
+ do {
+ if (res instanceof SlingHttpServletResponse) {
+ return
JavaxToJakartaResponseWrapper.toJakartaResponse((SlingHttpServletResponse) res);
+ }
+ if (res instanceof javax.servlet.ServletResponseWrapper) {
+ res = ((javax.servlet.ServletResponseWrapper)
res).getResponse();
+ } else {
+ res = null;
+ }
+ } while (res != null);
+ }
+ throw new IllegalArgumentException("ServletResponse not wrapping
SlingJakartaHttpServletResponse: " + res);
+ }
+
// if we unwrapped everything and did not find a
// SlingJakartaHttpServletResponse, we lost
throw new IllegalArgumentException("ServletResponse not wrapping
SlingJakartaHttpServletResponse: " + response);
@@ -407,13 +464,15 @@ public class RequestData {
}
// javax to jakarta wrapper?
- if (response instanceof JavaxToJakartaResponseWrapper) {
- javax.servlet.ServletResponse res =
((JavaxToJakartaResponseWrapper) response).getResponse();
+ if (response instanceof
org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) {
+ javax.servlet.ServletResponse res =
+
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper)
response).getResponse();
while (res instanceof javax.servlet.ServletResponseWrapper) {
res = ((javax.servlet.ServletResponseWrapper)
res).getResponse();
}
- if (res instanceof JakartaToJavaxResponseWrapper) {
- final ServletResponse r = ((JakartaToJavaxResponseWrapper)
res).getResponse();
+ if (res instanceof
org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) {
+ final ServletResponse r =
+
((org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper)
res).getResponse();
if (r instanceof SlingJakartaHttpServletResponse) {
return unwrap((SlingJakartaHttpServletResponse) r);
}
diff --git a/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
b/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
index 09f9c1a..849eb86 100644
--- a/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
+++ b/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
@@ -22,23 +22,32 @@ import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import junit.framework.TestCase;
+import org.junit.Test;
-public class ResponseUtilTest extends TestCase {
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+@SuppressWarnings("deprecation")
+public class ResponseUtilTest {
+
+ @Test
public void testNullInput() {
assertNull(ResponseUtil.escapeXml(null));
}
+ @Test
public void testNoEscapes() {
assertEquals("foo and bar", ResponseUtil.escapeXml("foo and bar"));
}
+ @Test
public void testEscapes() {
assertEquals(
"<bonnie> & </clyde> && others are
having fun with " and ' characters",
ResponseUtil.escapeXml("<bonnie> & </clyde> && others are
having fun with \" and ' characters"));
}
+ @Test
public void testXmlEscapingWriter() throws IOException {
final StringWriter sw = new StringWriter();
final Writer w = ResponseUtil.getXmlEscapingWriter(sw);