This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-starter-test-services.git
The following commit(s) were added to refs/heads/master by this push:
new 9dd863f SLING-13077 - ExportServlet cannot adapt model to javax
SlingHttpServletRequest when running in a Jakarta Servlet environment (#24)
9dd863f is described below
commit 9dd863f63ccba01f99e75846a6197524de3b651c
Author: Robert Munteanu <[email protected]>
AuthorDate: Wed Feb 11 18:56:10 2026 +0100
SLING-13077 - ExportServlet cannot adapt model to javax
SlingHttpServletRequest when running in a Jakarta Servlet environment (#24)
Inject the request in the DummyModel as a @Self member. This makes the test
execution more strict
and exposes additional failure scenarios.
---
pom.xml | 6 +++
.../RequestInjected.java} | 7 ++-
.../starter/testservices/models/DummyModel.java | 4 ++
...{DummyModel.java => RequestInjectionModel.java} | 25 +++++------
.../starter/testservices/models/package-info.java | 2 +-
.../ModelAdaptingFromJavaxRequestServlet.java | 50 ++++++++++++++++++++++
6 files changed, 77 insertions(+), 17 deletions(-)
diff --git a/pom.xml b/pom.xml
index 81ae7e9..a95789a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,12 @@
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.wrappers</artifactId>
+ <version>6.1.0</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.api</artifactId>
diff --git
a/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
b/src/main/java/org/apache/sling/starter/testservices/exported/RequestInjected.java
similarity index 86%
copy from
src/main/java/org/apache/sling/starter/testservices/models/package-info.java
copy to
src/main/java/org/apache/sling/starter/testservices/exported/RequestInjected.java
index 3adb55a..99df612 100644
---
a/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
+++
b/src/main/java/org/apache/sling/starter/testservices/exported/RequestInjected.java
@@ -16,6 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.sling.starter.testservices.exported;
[email protected]("2.0.16")
-package org.apache.sling.starter.testservices.models;
+public interface RequestInjected {
+
+ boolean isRequestInjected();
+}
diff --git
a/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
b/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
index 3510075..8bebaf5 100644
--- a/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
+++ b/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
@@ -23,6 +23,7 @@ import javax.annotation.PostConstruct;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.models.annotations.Exporter;
import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.Self;
@Model(adaptables = SlingHttpServletRequest.class, resourceType =
"sling/test/htl/model")
@Exporter(name = "jackson", extensions = "json")
@@ -30,6 +31,9 @@ public class DummyModel {
private String message;
+ @Self
+ private SlingHttpServletRequest request;
+
@PostConstruct
public void init() {
message = "from-sling-model";
diff --git
a/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
b/src/main/java/org/apache/sling/starter/testservices/models/RequestInjectionModel.java
similarity index 64%
copy from
src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
copy to
src/main/java/org/apache/sling/starter/testservices/models/RequestInjectionModel.java
index 3510075..b452114 100644
--- a/src/main/java/org/apache/sling/starter/testservices/models/DummyModel.java
+++
b/src/main/java/org/apache/sling/starter/testservices/models/RequestInjectionModel.java
@@ -18,24 +18,21 @@
*/
package org.apache.sling.starter.testservices.models;
-import javax.annotation.PostConstruct;
-
import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.models.annotations.Exporter;
import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+import org.apache.sling.starter.testservices.exported.RequestInjected;
-@Model(adaptables = SlingHttpServletRequest.class, resourceType =
"sling/test/htl/model")
-@Exporter(name = "jackson", extensions = "json")
-public class DummyModel {
-
- private String message;
+@SuppressWarnings("deprecation")
+@Model(adaptables = SlingHttpServletRequest.class, adapters =
RequestInjected.class)
+// TODO - do we need to implement an interface to trigger the error??
+public class RequestInjectionModel implements RequestInjected {
- @PostConstruct
- public void init() {
- message = "from-sling-model";
- }
+ @Self
+ private SlingHttpServletRequest slingRequest;
- public String getMessage() {
- return message;
+ @Override
+ public boolean isRequestInjected() {
+ return slingRequest != null;
}
}
diff --git
a/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
b/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
index 3adb55a..87887d2 100644
---
a/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
+++
b/src/main/java/org/apache/sling/starter/testservices/models/package-info.java
@@ -17,5 +17,5 @@
* under the License.
*/
[email protected]("2.0.16")
[email protected]("2.1.0")
package org.apache.sling.starter.testservices.models;
diff --git
a/src/main/java/org/apache/sling/starter/testservices/servlets/ModelAdaptingFromJavaxRequestServlet.java
b/src/main/java/org/apache/sling/starter/testservices/servlets/ModelAdaptingFromJavaxRequestServlet.java
new file mode 100644
index 0000000..e98b31a
--- /dev/null
+++
b/src/main/java/org/apache/sling/starter/testservices/servlets/ModelAdaptingFromJavaxRequestServlet.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.starter.testservices.servlets;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+import java.io.IOException;
+
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.apache.sling.starter.testservices.exported.RequestInjected;
+import org.jetbrains.annotations.NotNull;
+import org.osgi.service.component.annotations.Component;
+
+@Component(service = Servlet.class)
+@SlingServletPathsStrict(paths = "/bin/model-from-javax-servlet", extensions =
"txt")
+public class ModelAdaptingFromJavaxRequestServlet extends
SlingAllMethodsServlet {
+
+ @Override
+ protected void doGet(@NotNull SlingHttpServletRequest request, @NotNull
SlingHttpServletResponse response)
+ throws ServletException, IOException {
+
+ RequestInjected model = request.adaptTo(RequestInjected.class);
+ boolean success = model != null && model.isRequestInjected();
+
+ response.setContentType("text/plain");
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.getWriter().write(String.valueOf(success));
+ }
+}