Re: [commons-fileupload2-jakarta] JakartaServletFileUpload.getItemIterator() not working in 2.0.0-M1

2023-10-08 Thread Gary Gregory
Please provide a PR so tye build checks can run.

TY,
Gary

On Sun, Oct 8, 2023, 11:52 AM Maxim Solodovnik  wrote:

> Here is the patch inlined (not sure if it worth PR ... )
>
> 
> diff --git
> a/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
>
> b/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
> index 06b8de62..b3f1c772 100644
> ---
> a/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
> +++
> b/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
> @@ -19,8 +19,10 @@ package org.apache.commons.fileupload2.jakarta.servlet5;
>  import static org.junit.jupiter.api.Assertions.assertEquals;
>  import static org.junit.jupiter.api.Assertions.assertTrue;
>
> +import java.io.InputStream;
>  import java.nio.charset.StandardCharsets;
>  import java.util.List;
> +import java.util.concurrent.atomic.AtomicInteger;
>
>  import org.apache.commons.fileupload2.core.AbstractFileUploadTest;
>  import org.apache.commons.fileupload2.core.Constants;
> @@ -107,6 +109,22 @@ public class JakartaServletFileUploadTest
>
>  assertTrue(mappedParameters.containsKey("multi"));
>  assertEquals(2, mappedParameters.get("multi").size());
> +
> +final var itemCount = new AtomicInteger(0);
> +upload.getItemIterator(request).forEachRemaining(item -> {
> +itemCount.incrementAndGet();
> +String name = item.getFieldName();
> +InputStream stream = item.getInputStream();
> +if (item.isFormField()) {
> +System.out.println("Form field " + name + " with value "
> ++ " detected.");
> +} else {
> +System.out.println("File field " + name + " with file
> name "
> ++ item.getName() + " detected.");
> +// Process the input stream
> +}
> +});
> +assertEquals(4, itemCount.get());
>  }
>
>  @Override
>
> On Fri, 29 Sept 2023 at 19:00, Gary Gregory 
> wrote:
> >
> > Please provide a patch attached to a Jira ticket or a PR for a failing
> unit
> > test to make it simple for a maintainer to help you out.
> >
> > Gary
> >
> > On Thu, Sep 28, 2023, 12:39 AM Maxim Solodovnik 
> > wrote:
> >
> > > Hello,
> > >
> > > I've tried to check this one :)
> > >
> > > Modified this test:
> > >
> > >
> commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
> > >
> > > Add this block at the bottom:
> > >
> > > ```
> > > final var itemCount = new AtomicInteger(0);
> > > upload.getItemIterator(new JakartaMockServletHttpRequest(bytes,
> > > Constants.CONTENT_TYPE)).forEachRemaining(item -> {
> > > String name = item.getFieldName();
> > > InputStream stream = item.getInputStream();
> > > if (item.isFormField()) {
> > > System.out.println("Form field " + name + " with value " + "
> > > detected.");
> > > } else {
> > > System.out.println("File field " + name + " with file name " +
> > > item.getName() + " detected.");
> > > // Process the input stream
> > > }
> > > });
> > > assertEquals(4, itemCount.get());
> > > ```
> > >
> > > The test is GREEN
> > >
> > > BUT
> > >
> > > if i try to reuse previously created request like this:
> > >
> > > ```
> > > upload.getItemIterator(request).forEachRemaining(item -> {
> > > ```
> > >
> > > The test will fail
> > >
> > >
> > > Is it be possible request was already iterated before
> > > `forEachRemaining` was called?
> > >
> > > On Thu, 28 Sept 2023 at 08:31, Gary Gregory 
> > > wrote:
> > > >
> > > > Hi,
> > > >
> > > > The best way to help would be to provide a PR on GitHub with a
> failing
> > > > test, and if you find it, a fix.
> > > >
> > > > Gary
> > > >
> > > >
> > > > On Wed, Sep 27, 2023, 7:33 PM Ian Evans <
> ian_robert_ev...@hotmail.com>
> > > > wrote:
> > > >
> > > > > Using the following library:
> > > > >
> > > > > 
> > > > > org.apache.commons
> > > > > commons-fileupload2-jakarta
> > > > > 2.0.0-M1
> > > > > 
> > > > >
> > > > > The Streaming API (documented here FileUpload – The Streaming API (
> > > > > apache.org)<
> > > > >
> https://commons.apache.org/proper/commons-fileupload/streaming.html>)
> > > > > does not return any items. I've tested the following code using
> > > postman and
> > > > > curl to send a multipart/form-data request, in both cases
> > > getItemIterator
> > > > > fails to return any items (internally it seems an exceptio is
> thrown):
> > > > >
> > > > >
> > > > >  public ResponseEntity upload(HttpServletRequest request)
> throws
> > > > > IOException {
> > > > 

Re: [commons-fileupload2-jakarta] JakartaServletFileUpload.getItemIterator() not working in 2.0.0-M1

2023-10-08 Thread Maxim Solodovnik
Here is the patch inlined (not sure if it worth PR ... )


diff --git 
a/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
b/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
index 06b8de62..b3f1c772 100644
--- 
a/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
+++ 
b/commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
@@ -19,8 +19,10 @@ package org.apache.commons.fileupload2.jakarta.servlet5;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;

+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;

 import org.apache.commons.fileupload2.core.AbstractFileUploadTest;
 import org.apache.commons.fileupload2.core.Constants;
@@ -107,6 +109,22 @@ public class JakartaServletFileUploadTest

 assertTrue(mappedParameters.containsKey("multi"));
 assertEquals(2, mappedParameters.get("multi").size());
+
+final var itemCount = new AtomicInteger(0);
+upload.getItemIterator(request).forEachRemaining(item -> {
+itemCount.incrementAndGet();
+String name = item.getFieldName();
+InputStream stream = item.getInputStream();
+if (item.isFormField()) {
+System.out.println("Form field " + name + " with value "
++ " detected.");
+} else {
+System.out.println("File field " + name + " with file name "
++ item.getName() + " detected.");
+// Process the input stream
+}
+});
+assertEquals(4, itemCount.get());
 }

 @Override

On Fri, 29 Sept 2023 at 19:00, Gary Gregory  wrote:
>
> Please provide a patch attached to a Jira ticket or a PR for a failing unit
> test to make it simple for a maintainer to help you out.
>
> Gary
>
> On Thu, Sep 28, 2023, 12:39 AM Maxim Solodovnik 
> wrote:
>
> > Hello,
> >
> > I've tried to check this one :)
> >
> > Modified this test:
> >
> > commons-fileupload2-jakarta-servlet5/src/test/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUploadTest.java
> >
> > Add this block at the bottom:
> >
> > ```
> > final var itemCount = new AtomicInteger(0);
> > upload.getItemIterator(new JakartaMockServletHttpRequest(bytes,
> > Constants.CONTENT_TYPE)).forEachRemaining(item -> {
> > String name = item.getFieldName();
> > InputStream stream = item.getInputStream();
> > if (item.isFormField()) {
> > System.out.println("Form field " + name + " with value " + "
> > detected.");
> > } else {
> > System.out.println("File field " + name + " with file name " +
> > item.getName() + " detected.");
> > // Process the input stream
> > }
> > });
> > assertEquals(4, itemCount.get());
> > ```
> >
> > The test is GREEN
> >
> > BUT
> >
> > if i try to reuse previously created request like this:
> >
> > ```
> > upload.getItemIterator(request).forEachRemaining(item -> {
> > ```
> >
> > The test will fail
> >
> >
> > Is it be possible request was already iterated before
> > `forEachRemaining` was called?
> >
> > On Thu, 28 Sept 2023 at 08:31, Gary Gregory 
> > wrote:
> > >
> > > Hi,
> > >
> > > The best way to help would be to provide a PR on GitHub with a failing
> > > test, and if you find it, a fix.
> > >
> > > Gary
> > >
> > >
> > > On Wed, Sep 27, 2023, 7:33 PM Ian Evans 
> > > wrote:
> > >
> > > > Using the following library:
> > > >
> > > > 
> > > > org.apache.commons
> > > > commons-fileupload2-jakarta
> > > > 2.0.0-M1
> > > > 
> > > >
> > > > The Streaming API (documented here FileUpload – The Streaming API (
> > > > apache.org)<
> > > > https://commons.apache.org/proper/commons-fileupload/streaming.html>)
> > > > does not return any items. I've tested the following code using
> > postman and
> > > > curl to send a multipart/form-data request, in both cases
> > getItemIterator
> > > > fails to return any items (internally it seems an exceptio is thrown):
> > > >
> > > >
> > > >  public ResponseEntity upload(HttpServletRequest request) throws
> > > > IOException {
> > > > if (!JakartaServletFileUpload.isMultipartContent(request)) {
> > > > throw new IllegalArgumentException("not multipart");
> > > > }
> > > >
> > > > JakartaServletFileUpload upload = new
> > JakartaServletFileUpload();
> > > >
> > > > upload.getItemIterator(request).forEachRemaining(item -> {
> > > > String name = item.getFieldName();
> > > > InputStream