Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: EE-3.3.0.GA_P03
-
Fix Version/s: 4.1.1, EE-3.3.0.GA_P04
-
Component/s: ACE-Components
-
Labels:None
-
Environment:Jetty 9 (9.2.7, 9.2.13)
-
Assignee Priority:P2
-
Support Case References:Support Case #13598 - https://icesoft.my.salesforce.com/5007000001SBhul
Description
It is not possible to upload files with the ace:fileEntry component on Jetty 9. ICE-10570 mentions similar issues with Jetty 9 and ICEfaces 4. When trying to upload a file the following error stack trace is thrown:
[STDERR] java.io.FileNotFoundException: C:\tmp\C:\Praca\BMC\workspaceR7.0\ICEfacesBasedOnOwui\src\main\webapp\mc3jznemooxn3rs48rva4v79\ice_file_8844744077071998930.tmp (The filename, directory name, or volume label syntax is incorrect)
[STDERR] at java.io.FileInputStream.open(Native Method)
[STDERR] at java.io.FileInputStream.<init>(FileInputStream.java:146)
[STDERR] at org.eclipse.jetty.util.MultiPartInputStreamParser$MultiPart.getInputStream(MultiPartInputStreamParser.java:203)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload$PartFile.transferFile(FileEntryUpload.java:787)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.uploadFile(FileEntryUpload.java:416)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.handleMultipartPortion(FileEntryUpload.java:271)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.afterPhase(FileEntryUpload.java:138)
[STDERR] at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
[STDERR] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
[STDERR] at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
[STDERR] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
[STDERR] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:800)
[STDERR] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
[STDERR] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
[STDERR] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
[STDERR] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
[STDERR] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
[STDERR] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
[STDERR] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
[STDERR] at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
[STDERR] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
[STDERR] at org.eclipse.jetty.server.Server.handle(Server.java:497)
[STDERR] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
[STDERR] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:245)
[STDERR] at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
[STDERR] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
[STDERR] at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
[STDERR] at java.lang.Thread.run(Thread.java:745)
[STDERR] java.io.FileNotFoundException: C:\tmp\C:\Praca\BMC\workspaceR7.0\ICEfacesBasedOnOwui\src\main\webapp\mc3jznemooxn3rs48rva4v79\ice_file_8844744077071998930.tmp (The filename, directory name, or volume label syntax is incorrect)
[STDERR] at java.io.FileInputStream.open(Native Method)
[STDERR] at java.io.FileInputStream.<init>(FileInputStream.java:146)
[STDERR] at org.eclipse.jetty.util.MultiPartInputStreamParser$MultiPart.getInputStream(MultiPartInputStreamParser.java:203)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload$PartFile.transferFile(FileEntryUpload.java:787)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.uploadFile(FileEntryUpload.java:416)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.handleMultipartPortion(FileEntryUpload.java:271)
[STDERR] at org.icefaces.ace.component.fileentry.FileEntryUpload.afterPhase(FileEntryUpload.java:138)
[STDERR] at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
[STDERR] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
[STDERR] at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
[STDERR] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
[STDERR] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:800)
[STDERR] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
[STDERR] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
[STDERR] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
[STDERR] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
[STDERR] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
[STDERR] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
[STDERR] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
[STDERR] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
[STDERR] at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
[STDERR] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
[STDERR] at org.eclipse.jetty.server.Server.handle(Server.java:497)
[STDERR] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
[STDERR] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:245)
[STDERR] at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
[STDERR] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
[STDERR] at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
[STDERR] at java.lang.Thread.run(Thread.java:745)
Issue Links
- depends on
-
ICE-10810 NullPointerException from EnvUtils.isJSF22
- Closed
The issue is caused by the call to javax.servlet.http.Part.write(fileName) which should save the uploaded content but the provided file path is absolute instead of relative as it is required (see https://docs.oracle.com/javaee/6/api/javax/servlet/http/Part.html#write(java.lang.String) ).
Modified PartFile.transferFile method to just use a FileOutputStream instead (just as we already do in ICEfaces4).