ICEfaces
  1. ICEfaces
  2. ICE-10570

Files upload issues (Jetty 9.2.9)

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-4.0.0.GA
    • Fix Version/s: 4.1
    • Labels:
      None
    • Environment:
      Jenkins EE-4.0 trunk Build 198
      Desktop browsers: Firefox34/Chrome41/IE11
      Mobile: Safari/ iPhone4S, iOS7.2, Android4.4.2
      Server: Jetty 9.2.9
    • Assignee Priority:
      P2

      Description

      The following issues were found while testing showcase on Jetty 9.2.9:

      1) ace:fileEntry (Jetty specific)
      Overview/Listener/Validation: unable to upload valid files, no matter their size or extension type; a message is rendered about the files being 'invalid', screen shot attached.

      2) Camera (Jetty specific, iOS 7 specific - cannot be reproduced on Android)
      A server warning is seen each time after taking a picture, when clicking the "Use Photo" link:
      2015-03-16 13:14:15.202:WARN:oeju.MultiPartInputStreamParser:qtp1238180295-19: Badly formatted multipart request

      No errors are seen afterwards when uploading the photo..


      3) Camcorder/Microphone (Jetty specific)
      A server warning is seen each time after recording a video/audio, when clicking the "Use video/Use" button:
      Mar 16, 2015 1:06:07 PM com.sun.faces.application.view.ViewScopeManager <init>
      INFO: CDI @ViewScoped bean functionality unavailable
      2015-03-16 13:06:26.865:WARN:oeju.MultiPartInputStreamParser:qtp1238180295-18: Badly formatted multipart request

      Afterwards, a NullPointerException occurs when uploading the video/audio, although no functional issues are seen on the demo page, and the video/audio file is uploaded on the server.

      2015-03-16 12:57:41.659:WARN:oejs.HttpChannel:qtp1238180295-106: /showcase/javax.faces.resource/edde
      ed94-33a4-4beb-a864-5cd36c0fa20d.jsf;jsessionid=1bdjdyhqrky9ya3icxwefvllg
      java.lang.NullPointerException
              at org.icefaces.application.ResourceRegistry.handleSessionAwareResourceRequest(ResourceRegis
      try.java:209)
              at org.icefaces.impl.application.SessionAwareResourceHandlerWrapper.handleResourceRequest(Se
      ssionAwareResourceHandlerWrapper.java:40)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at org.icefaces.impl.push.DynamicResourceDispatcher.handleResourceRequest(DynamicResourceDis
      patcher.java:78)
              at org.icefaces.impl.application.WindowScopeManager.handleSessionAwareResourceRequest(Window
      ScopeManager.java:82)
              at org.icefaces.impl.application.SessionAwareResourceHandlerWrapper.handleResourceRequest(Se
      ssionAwareResourceHandlerWrapper.java:40)
              at org.icefaces.impl.push.servlet.ICEpushResourceHandler$ICEpushResourceHandlerImpl.handleRe
      sourceRequest(ICEpushResourceHandler.java:228)
              at org.icefaces.impl.push.servlet.ICEpushResourceHandler.handleResourceRequest(ICEpushResour
      ceHandler.java:128)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at org.icefaces.impl.application.ClientDescriptorSetup.handleSessionAwareResourceRequest(Cli
      entDescriptorSetup.java:44)
              at org.icefaces.impl.application.SessionAwareResourceHandlerWrapper.handleResourceRequest(Se
      ssionAwareResourceHandlerWrapper.java:40)
              at org.icefaces.impl.application.SessionTimeoutMonitor.handleSessionAwareResourceRequest(Ses
      sionTimeoutMonitor.java:63)
              at org.icefaces.impl.application.SessionAwareResourceHandlerWrapper.handleResourceRequest(Se
      ssionAwareResourceHandlerWrapper.java:40)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at org.icefaces.ace.component.qrcode.generator.QRCodeResourceHandler.handleResourceRequest(Q
      RCodeResourceHandler.java:67)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at org.icefaces.mobi.component.geotrack.GeoTrackResourceHandler.handleResourceRequest(GeoTra
      ckResourceHandler.java:131)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapp
      er.java:153)
              at org.icefaces.impl.application.AuxUploadResourceHandler.handleResourceRequest(AuxUploadRes
      ourceHandler.java:82)
              at javax.faces.webapp.FacesServlet.service(FacesServlet.java:643)
              at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
              at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
              at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
              at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
              at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
              at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
              at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
              at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
              at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection
      .java:215)
              at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
              at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
              at org.eclipse.jetty.server.Server.handle(Server.java:497)
              at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
              at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
              at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
              at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
              at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
              at java.lang.Thread.run(Unknown Source)
      2015-03-16 12:57:41.697:WARN:oejs.HttpChannel:qtp1238180295-106: Could not send response error 500:
      java.lang.NullPointerException

        Activity

        Hide
        Carmen Cristurean added a comment -

        Steps to install showcase app on Jetty 9.2.9:

        • configure the showcase app to use a jetty configuration file (jetty-web.xml) in the WEB-INF directory; here is its content:
          <Configure class="org.eclipse.jetty.webapp.WebAppContext">
          <Set name="contextPath">/showcase</Set>
          </Configure>
        • build the .war file using "servlet-profile" Ant target.
        • deploy the .war file by copying it over to: [JETTY_HOME]\webapps
        • start jetty from [JETTY_HOME]: java -jar start.jar
        Show
        Carmen Cristurean added a comment - Steps to install showcase app on Jetty 9.2.9: configure the showcase app to use a jetty configuration file (jetty-web.xml) in the WEB-INF directory; here is its content: <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/showcase</Set> </Configure> build the .war file using "servlet-profile" Ant target. deploy the .war file by copying it over to: [JETTY_HOME] \webapps start jetty from [JETTY_HOME] : java -jar start.jar
        Hide
        Mircea Toma added a comment - - edited

        1) The issue is caused by org.eclipse.jetty.util.MultiPartInputStreamParser.MultiPart's write method. When passing in an absolute file path Jetty will still try to relatively resolve the path. The applied fix replaces MultiPart.write(File) call with copying the uploaded content directly into the file's output stream.

        2) I cannot reproduce this, probably it was resolved by a previous fix.

        3) I cannot reproduce this, probably it was resolved by a previous fix.

        Show
        Mircea Toma added a comment - - edited 1) The issue is caused by org.eclipse.jetty.util.MultiPartInputStreamParser.MultiPart 's write method. When passing in an absolute file path Jetty will still try to relatively resolve the path. The applied fix replaces MultiPart.write(File) call with copying the uploaded content directly into the file's output stream. 2) I cannot reproduce this, probably it was resolved by a previous fix. 3) I cannot reproduce this, probably it was resolved by a previous fix.
        Hide
        Mircea Toma added a comment -

        1) Applied fix to order the upload parts with the form parameters first and the uploaded files last to ensure that the form parameters are available when processing the files.

        Show
        Mircea Toma added a comment - 1) Applied fix to order the upload parts with the form parameters first and the uploaded files last to ensure that the form parameters are available when processing the files.
        Hide
        Mircea Toma added a comment - - edited

        2) 3) After I applied the fix for issue 1 I could not reproduce 2 and 3 anymore. I used iOS 7.0 on an iPhone 4. Please confirm if indeed these two remaining issues are fixed!

        Show
        Mircea Toma added a comment - - edited 2) 3) After I applied the fix for issue 1 I could not reproduce 2 and 3 anymore. I used iOS 7.0 on an iPhone 4. Please confirm if indeed these two remaining issues are fixed!
        Hide
        Mircea Toma added a comment - - edited

        1) .... "Where are these files uploaded?"

        The temp directory used by Jetty on Windows should be something like:
        C:\Users\ **** \AppData\Local\Temp\jetty-0.0.0.0-8080-showcase.war-_showcase-any-************.dir

        Show
        Mircea Toma added a comment - - edited 1) .... "Where are these files uploaded?" The temp directory used by Jetty on Windows should be something like: C:\Users\ **** \AppData\Local\Temp\jetty-0.0.0.0-8080-showcase.war-_showcase-any-************.dir
        Hide
        Mircea Toma added a comment -

        3) Modified AuxUploadResourceHandler to detect connection aborted when running within Jetty.

        Show
        Mircea Toma added a comment - 3) Modified AuxUploadResourceHandler to detect connection aborted when running within Jetty.
        Hide
        Mircea Toma added a comment - - edited

        2) 3) The remaining warnings displayed by Jetty seem to be caused by upload request made by Bridgeit client. The boundary property in Content-Type header contains dashes (-----) before and after the marker. This is not required, running with Android container the dashes are missing and as a consequence the warnings are not triggered. Most probably bridgeit-client/ios/icemobile/Shared/NativeInterface.m will need to be modified.

        Show
        Mircea Toma added a comment - - edited 2) 3) The remaining warnings displayed by Jetty seem to be caused by upload request made by Bridgeit client. The boundary property in Content-Type header contains dashes ( ----- ) before and after the marker. This is not required, running with Android container the dashes are missing and as a consequence the warnings are not triggered. Most probably bridgeit-client/ios/icemobile/Shared/NativeInterface.m will need to be modified.
        Hide
        Carmen Cristurean added a comment - - edited

        IF4 trunk r44495: verified ace:fileEntry in IE11, FF34, Chrome41 and mobi components on iOS7/Android4.4.2.
        All issues from description can no longer be reproduced (except the warning when uploading media files); also the files are uploaded.

        Show
        Carmen Cristurean added a comment - - edited IF4 trunk r44495: verified ace:fileEntry in IE11, FF34, Chrome41 and mobi components on iOS7/Android4.4.2. All issues from description can no longer be reproduced (except the warning when uploading media files); also the files are uploaded.
        Hide
        Mircea Toma added a comment -

        Created MOBI-1133 to make sure the boundary marker in Content-Type header is fixed.

        Show
        Mircea Toma added a comment - Created MOBI-1133 to make sure the boundary marker in Content-Type header is fixed.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Carmen Cristurean
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: