You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Nikhil P Kookkiri <ni...@sicurosolutions.com> on 2018/10/08 09:06:47 UTC

Struts2 - multipart/related - HttpServletRequest#getParts not working

I have request coming from another application which is 
'multipart/related'. In the mutlipart request body, I am receiving 
image/jpeg and application/xml. I suppose, I should be iterating over 
the http part obtained from getPaths method in the HttpServletRequest 
object and read the stream available on each of the parts. When I try 
doing that, I am getting the following error:

java.lang.IllegalStateException: UT010057: multipart config was not 
present on Servlet
ERROR [stderr] (default task-2)     at 
io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.verifyMultipartServlet(HttpServletRequestImpl.java:523)
ERROR [stderr] (default task-2)     at 
io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.getParts(HttpServletRequestImpl.java:512)
ERROR [stderr] (default task-2)     at 
javax.servlet.api//javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:375)

Please let me know the best possible solution for this.

Here is what I am doing in the code:

     public class TestMultiPart extends ActionSupport implements 
ServletRequestAware
     {
         private InputStream inputStream;
         private HttpServletRequest request;

     public String execute()
     {
         BufferedInputStream bis = null;
         BufferedOutputStream bos = null;
         try
         {
             Collection<Part> parts = request.getParts();
             for(Part part : parts)
             {
                 String contentType = part.getContentType();
                 System.out.println("Content type is: " + contentType);
                 File file = getFileToDownload(getContentType(contentType));
                 if(file != null)
                 {
                     bis = new 
BufferedInputStream(request.getInputStream());
                     bos = new BufferedOutputStream(new 
FileOutputStream(file));
                     byte[] bytes = new byte[bis.available()];
                     while(bis.read(bytes) > 0)
                     {
                         bos.write(bytes);
                         bos.flush();
                         bytes = new byte[bis.available()];
                     }
                 }
             }
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } catch (ServletException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             if(bis != null)
             {
                 try {
                     bis.close();
                 } catch (IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             }
             if(bos != null)
             {
                 try {
                     bos.close();
                 } catch (IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             }
         }

         inputStream = new 
ByteArrayInputStream("200".getBytes(StandardCharsets.UTF_8));
         return SUCCESS;
     }

     public InputStream getInputStream() {
         return inputStream;
     }

     public void setInputStream(InputStream inputStream) {
         this.inputStream = inputStream;
     }

     @Override
     public void setServletRequest(HttpServletRequest requestObject)
     {
         this.request = requestObject;
     }

}

-- 
Best regards,
Nikhil P kookkiri

Gtalk: nikhil.pk81
Skype: nikhil.pk81


RE: Struts2 - multipart/related - HttpServletRequest#getParts not working

Posted by Yasser Zamani <ya...@apache.org>.
I see Struts REST plugin has a handler for multipart request but it and even the whole Struts framework also talks only about multipart/form-data ;) Unfortunately it seems Struts doesn't know such content type at all. Anyway, some tips can be found in net via googling "UT010016: Not a multi part request".

Regards.

>-----Original Message-----
>From: Nikhil P Kookkiri <ni...@sicurosolutions.com>
>Sent: Tuesday, October 9, 2018 10:05 AM
>To: Struts Users Mailing List <us...@struts.apache.org>; Yasser Zamani
><ya...@apache.org>
>Subject: Re: Struts2 - multipart/related - HttpServletRequest#getParts not
>working
>
>
>Hi Yesser, thanks for your response. Yes, it is the issue with the servlet. I am
>suspecting that MutiPartConfig works only for multipart/form-data and does not
>work with multipart/related. I passed the request directly to HttpServlet instead
>of Sturts mapped Action with @MultiPartConfig configured and I got the
>exception:
>javax.servlet.ServletException: UT010016: Not a multi part request.
>Almost all documentation I saw talks only about multipart/form-data.
>
>I am assuming using Struts rest plugin also will not help in this case.
>Kindly let me know.
>
>Best regards,
>Nikhil P kookkiri
>
>On Tuesday 09 October 2018 11:02 AM, Yasser Zamani wrote:
>> This isn't Struts issue but your underlying servlet message. Anyway, what about
>trying Struts itself file upload feature. Then ask that another app to http post the
>file to a file upload action.
>>
>> Regards.
>>
>>> -----Original Message-----
>>> From: Nikhil P Kookkiri <ni...@sicurosolutions.com>
>>> Sent: Monday, October 8, 2018 12:37 PM
>>> To: user@struts.apache.org
>>> Subject: Struts2 - multipart/related - HttpServletRequest#getParts
>>> not working
>>>
>>> I have request coming from another application which is
>>> 'multipart/related'. In the mutlipart request body, I am receiving
>>> image/jpeg and application/xml. I suppose, I should be iterating over
>>> the http part obtained from getPaths method in the HttpServletRequest
>>> object and read the stream available on each of the parts. When I try doing
>that, I am getting the following error:
>>>
>>> java.lang.IllegalStateException: UT010057: multipart config was not
>>> present on Servlet ERROR [stderr] (default task-2)     at
>>> io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.
>>> verifyMul
>>> tipartServlet(HttpServletRequestImpl.java:523)
>>> ERROR [stderr] (default task-2)     at
>>> io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.
>>> getParts(
>>> HttpServletRequestImpl.java:512)
>>> ERROR [stderr] (default task-2)     at
>>> javax.servlet.api//javax.servlet.http.HttpServletRequestWrapper.getPa
>>> rts(HttpSer
>>> vletRequestWrapper.java:375)
>>>
>>> Please let me know the best possible solution for this.
>>>
>>> Here is what I am doing in the code:
>>>
>>>      public class TestMultiPart extends ActionSupport implements
>>> ServletRequestAware
>>>      {
>>>          private InputStream inputStream;
>>>          private HttpServletRequest request;
>>>
>>>      public String execute()
>>>      {
>>>          BufferedInputStream bis = null;
>>>          BufferedOutputStream bos = null;
>>>          try
>>>          {
>>>              Collection<Part> parts = request.getParts();
>>>              for(Part part : parts)
>>>              {
>>>                  String contentType = part.getContentType();
>>>                  System.out.println("Content type is: " +
>>> contentType);
>>>                  File file =
>>> getFileToDownload(getContentType(contentType));
>>>                  if(file != null)
>>>                  {
>>>                      bis = new
>>> BufferedInputStream(request.getInputStream());
>>>                      bos = new BufferedOutputStream(new
>>> FileOutputStream(file));
>>>                      byte[] bytes = new byte[bis.available()];
>>>                      while(bis.read(bytes) > 0)
>>>                      {
>>>                          bos.write(bytes);
>>>                          bos.flush();
>>>                          bytes = new byte[bis.available()];
>>>                      }
>>>                  }
>>>              }
>>>          } catch (IOException e) {
>>>              // TODO Auto-generated catch block
>>>              e.printStackTrace();
>>>          } catch (ServletException e) {
>>>              // TODO Auto-generated catch block
>>>              e.printStackTrace();
>>>          } finally {
>>>              if(bis != null)
>>>              {
>>>                  try {
>>>                      bis.close();
>>>                  } catch (IOException e) {
>>>                      // TODO Auto-generated catch block
>>>                      e.printStackTrace();
>>>                  }
>>>              }
>>>              if(bos != null)
>>>              {
>>>                  try {
>>>                      bos.close();
>>>                  } catch (IOException e) {
>>>                      // TODO Auto-generated catch block
>>>                      e.printStackTrace();
>>>                  }
>>>              }
>>>          }
>>>
>>>          inputStream = new
>>> ByteArrayInputStream("200".getBytes(StandardCharsets.UTF_8));
>>>          return SUCCESS;
>>>      }
>>>
>>>      public InputStream getInputStream() {
>>>          return inputStream;
>>>      }
>>>
>>>      public void setInputStream(InputStream inputStream) {
>>>          this.inputStream = inputStream;
>>>      }
>>>
>>>      @Override
>>>      public void setServletRequest(HttpServletRequest requestObject)
>>>      {
>>>          this.request = requestObject;
>>>      }
>>>
>>> }
>>>
>>> --
>>> Best regards,
>>> Nikhil P kookkiri
>>>
>>> Gtalk: nikhil.pk81
>>> Skype: nikhil.pk81
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org


Re: Struts2 - multipart/related - HttpServletRequest#getParts not working

Posted by Nikhil P Kookkiri <ni...@sicurosolutions.com>.
Hi Yesser, thanks for your response. Yes, it is the issue with the 
servlet. I am suspecting that MutiPartConfig works only for 
multipart/form-data and does not work with multipart/related. I passed 
the request directly to HttpServlet instead of Sturts mapped Action with 
@MultiPartConfig configured and I got the exception: 
javax.servlet.ServletException: UT010016: Not a multi part request. 
Almost all documentation I saw talks only about multipart/form-data.

I am assuming using Struts rest plugin also will not help in this case. 
Kindly let me know.

Best regards,
Nikhil P kookkiri

On Tuesday 09 October 2018 11:02 AM, Yasser Zamani wrote:
> This isn't Struts issue but your underlying servlet message. Anyway, what about trying Struts itself file upload feature. Then ask that another app to http post the file to a file upload action.
>
> Regards.
>
>> -----Original Message-----
>> From: Nikhil P Kookkiri <ni...@sicurosolutions.com>
>> Sent: Monday, October 8, 2018 12:37 PM
>> To: user@struts.apache.org
>> Subject: Struts2 - multipart/related - HttpServletRequest#getParts not working
>>
>> I have request coming from another application which is 'multipart/related'. In
>> the mutlipart request body, I am receiving image/jpeg and application/xml. I
>> suppose, I should be iterating over the http part obtained from getPaths method
>> in the HttpServletRequest object and read the stream available on each of the
>> parts. When I try doing that, I am getting the following error:
>>
>> java.lang.IllegalStateException: UT010057: multipart config was not present on
>> Servlet ERROR [stderr] (default task-2)     at
>> io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.verifyMul
>> tipartServlet(HttpServletRequestImpl.java:523)
>> ERROR [stderr] (default task-2)     at
>> io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.getParts(
>> HttpServletRequestImpl.java:512)
>> ERROR [stderr] (default task-2)     at
>> javax.servlet.api//javax.servlet.http.HttpServletRequestWrapper.getParts(HttpSer
>> vletRequestWrapper.java:375)
>>
>> Please let me know the best possible solution for this.
>>
>> Here is what I am doing in the code:
>>
>>      public class TestMultiPart extends ActionSupport implements
>> ServletRequestAware
>>      {
>>          private InputStream inputStream;
>>          private HttpServletRequest request;
>>
>>      public String execute()
>>      {
>>          BufferedInputStream bis = null;
>>          BufferedOutputStream bos = null;
>>          try
>>          {
>>              Collection<Part> parts = request.getParts();
>>              for(Part part : parts)
>>              {
>>                  String contentType = part.getContentType();
>>                  System.out.println("Content type is: " + contentType);
>>                  File file = getFileToDownload(getContentType(contentType));
>>                  if(file != null)
>>                  {
>>                      bis = new
>> BufferedInputStream(request.getInputStream());
>>                      bos = new BufferedOutputStream(new FileOutputStream(file));
>>                      byte[] bytes = new byte[bis.available()];
>>                      while(bis.read(bytes) > 0)
>>                      {
>>                          bos.write(bytes);
>>                          bos.flush();
>>                          bytes = new byte[bis.available()];
>>                      }
>>                  }
>>              }
>>          } catch (IOException e) {
>>              // TODO Auto-generated catch block
>>              e.printStackTrace();
>>          } catch (ServletException e) {
>>              // TODO Auto-generated catch block
>>              e.printStackTrace();
>>          } finally {
>>              if(bis != null)
>>              {
>>                  try {
>>                      bis.close();
>>                  } catch (IOException e) {
>>                      // TODO Auto-generated catch block
>>                      e.printStackTrace();
>>                  }
>>              }
>>              if(bos != null)
>>              {
>>                  try {
>>                      bos.close();
>>                  } catch (IOException e) {
>>                      // TODO Auto-generated catch block
>>                      e.printStackTrace();
>>                  }
>>              }
>>          }
>>
>>          inputStream = new
>> ByteArrayInputStream("200".getBytes(StandardCharsets.UTF_8));
>>          return SUCCESS;
>>      }
>>
>>      public InputStream getInputStream() {
>>          return inputStream;
>>      }
>>
>>      public void setInputStream(InputStream inputStream) {
>>          this.inputStream = inputStream;
>>      }
>>
>>      @Override
>>      public void setServletRequest(HttpServletRequest requestObject)
>>      {
>>          this.request = requestObject;
>>      }
>>
>> }
>>
>> --
>> Best regards,
>> Nikhil P kookkiri
>>
>> Gtalk: nikhil.pk81
>> Skype: nikhil.pk81
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org


RE: Struts2 - multipart/related - HttpServletRequest#getParts not working

Posted by Yasser Zamani <ya...@apache.org>.
This isn't Struts issue but your underlying servlet message. Anyway, what about trying Struts itself file upload feature. Then ask that another app to http post the file to a file upload action.

Regards.

>-----Original Message-----
>From: Nikhil P Kookkiri <ni...@sicurosolutions.com>
>Sent: Monday, October 8, 2018 12:37 PM
>To: user@struts.apache.org
>Subject: Struts2 - multipart/related - HttpServletRequest#getParts not working
>
>I have request coming from another application which is 'multipart/related'. In
>the mutlipart request body, I am receiving image/jpeg and application/xml. I
>suppose, I should be iterating over the http part obtained from getPaths method
>in the HttpServletRequest object and read the stream available on each of the
>parts. When I try doing that, I am getting the following error:
>
>java.lang.IllegalStateException: UT010057: multipart config was not present on
>Servlet ERROR [stderr] (default task-2)     at
>io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.verifyMul
>tipartServlet(HttpServletRequestImpl.java:523)
>ERROR [stderr] (default task-2)     at
>io.undertow.servlet//io.undertow.servlet.spec.HttpServletRequestImpl.getParts(
>HttpServletRequestImpl.java:512)
>ERROR [stderr] (default task-2)     at
>javax.servlet.api//javax.servlet.http.HttpServletRequestWrapper.getParts(HttpSer
>vletRequestWrapper.java:375)
>
>Please let me know the best possible solution for this.
>
>Here is what I am doing in the code:
>
>     public class TestMultiPart extends ActionSupport implements
>ServletRequestAware
>     {
>         private InputStream inputStream;
>         private HttpServletRequest request;
>
>     public String execute()
>     {
>         BufferedInputStream bis = null;
>         BufferedOutputStream bos = null;
>         try
>         {
>             Collection<Part> parts = request.getParts();
>             for(Part part : parts)
>             {
>                 String contentType = part.getContentType();
>                 System.out.println("Content type is: " + contentType);
>                 File file = getFileToDownload(getContentType(contentType));
>                 if(file != null)
>                 {
>                     bis = new
>BufferedInputStream(request.getInputStream());
>                     bos = new BufferedOutputStream(new FileOutputStream(file));
>                     byte[] bytes = new byte[bis.available()];
>                     while(bis.read(bytes) > 0)
>                     {
>                         bos.write(bytes);
>                         bos.flush();
>                         bytes = new byte[bis.available()];
>                     }
>                 }
>             }
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (ServletException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } finally {
>             if(bis != null)
>             {
>                 try {
>                     bis.close();
>                 } catch (IOException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 }
>             }
>             if(bos != null)
>             {
>                 try {
>                     bos.close();
>                 } catch (IOException e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>                 }
>             }
>         }
>
>         inputStream = new
>ByteArrayInputStream("200".getBytes(StandardCharsets.UTF_8));
>         return SUCCESS;
>     }
>
>     public InputStream getInputStream() {
>         return inputStream;
>     }
>
>     public void setInputStream(InputStream inputStream) {
>         this.inputStream = inputStream;
>     }
>
>     @Override
>     public void setServletRequest(HttpServletRequest requestObject)
>     {
>         this.request = requestObject;
>     }
>
>}
>
>--
>Best regards,
>Nikhil P kookkiri
>
>Gtalk: nikhil.pk81
>Skype: nikhil.pk81


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org