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 54907d4  SLING-13083 - Code acessing the "request-parts-iterator"  
request attribute broken after migration to Jakarta (#23)
54907d4 is described below

commit 54907d4326cf0acb501468e0912381db6fa74ca9
Author: Robert Munteanu <[email protected]>
AuthorDate: Fri Jan 30 10:34:26 2026 +0100

    SLING-13083 - Code acessing the "request-parts-iterator"  request attribute 
broken after migration to Jakarta (#23)
    
    Add a streaming test servlet using the javax.servlet APIs to access 
uploaded parts.
---
 .../servlets/StreamedUploadServlet.java            | 80 ++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git 
a/src/main/java/org/apache/sling/starter/testservices/servlets/StreamedUploadServlet.java
 
b/src/main/java/org/apache/sling/starter/testservices/servlets/StreamedUploadServlet.java
new file mode 100644
index 0000000..6c46d73
--- /dev/null
+++ 
b/src/main/java/org/apache/sling/starter/testservices/servlets/StreamedUploadServlet.java
@@ -0,0 +1,80 @@
+/*
+ * 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 javax.servlet.http.Part;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+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.osgi.service.component.annotations.Component;
+
+@Component(service = Servlet.class)
+@SlingServletPathsStrict(paths = "/bin/streamed-upload", extensions = "txt", 
methods = "POST")
+public class StreamedUploadServlet extends SlingAllMethodsServlet {
+
+    private static final long serialVersionUID = 1L;
+    private static final String REQUEST_PARTS_ITERATOR_ATTR = 
"request-parts-iterator";
+
+    @Override
+    protected void doPost(SlingHttpServletRequest request, 
SlingHttpServletResponse response)
+            throws ServletException, IOException {
+
+        response.setContentType("text/plain");
+        response.setCharacterEncoding("UTF-8");
+
+        // Get the request-parts-iterator attribute set by the Sling Engine
+        Object iteratorAttr = 
request.getAttribute(REQUEST_PARTS_ITERATOR_ATTR);
+
+        if (iteratorAttr == null) {
+            response.getWriter()
+                    .write("ERROR: " + REQUEST_PARTS_ITERATOR_ATTR + " 
attribute not found. "
+                            + "Make sure to use 'Sling-uploadmode: stream' 
header or 'uploadmode=stream' parameter.");
+            response.setStatus(SlingHttpServletResponse.SC_BAD_REQUEST);
+            return;
+        }
+
+        Iterator<?> partsIterator = (Iterator<?>) iteratorAttr;
+
+        int partCount = 0;
+        StringBuilder sb = new StringBuilder();
+
+        while (partsIterator.hasNext()) {
+            // will fail if the part does not implement the javax variant of 
the interface
+            Part part = (Part) partsIterator.next();
+
+            partCount++;
+            sb.append("Part ").append(partCount).append(": 
name=").append(part.getName());
+            String filename = part.getSubmittedFileName();
+            if (filename != null) {
+                sb.append(", filename=").append(filename);
+            }
+            sb.append("\n");
+        }
+
+        response.getWriter().write("OK: Processed " + partCount + " part(s) as 
javax.servlet.http.Part\n");
+        response.getWriter().write(sb.toString());
+    }
+}

Reply via email to