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));
+    }
+}

Reply via email to