Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 352620 - [FileUpload] FileUploadProcessor cannot parse request
Summary: [FileUpload] FileUploadProcessor cannot parse request
Status: RESOLVED FIXED
Alias: None
Product: RAP
Classification: RT
Component: RWT (show other bugs)
Version: 1.5   Edit
Hardware: PC Windows 7
: P1 normal (vote)
Target Milestone: 1.5 M1   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-20 11:46 EDT by Austin Riddle CLA
Modified: 2011-07-24 11:41 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Austin Riddle CLA 2011-07-20 11:46:58 EDT
In CVS HEAD, the FileDialog does not perform the upload.

On the client, the server returns a status of 500 upon submit.

On the server, if you put a breakpoint in UploadPanel:243 it will not fire unless you resize the dialog....but then no ui changes actually occur and the dialog continues to sit there.
Comment 1 Austin Riddle CLA 2011-07-20 12:42:40 EDT
Upon upload an exception is thrown as a result of the call on FileUploadProcessor:73

osgi> 2011-07-20 11:35:10.297:WARN::ERROR:  /rap;jsessionid=112234gkxvsn01rnho1c8ym5un
java.lang.NullPointerException
	at org.eclipse.rwt.internal.uicallback.UICallBackManager.setHasRunnables(UICallBackManager.java:87)
	at org.eclipse.swt.widgets.Synchronizer$1.run(Synchronizer.java:83)
	at org.eclipse.rwt.internal.lifecycle.FakeContextUtil.runNonUIThreadWithFakeContext(FakeContextUtil.java:58)
	at org.eclipse.rwt.lifecycle.UICallBack.runNonUIThreadWithFakeContext(UICallBack.java:51)
	at org.eclipse.swt.widgets.Synchronizer.addLast(Synchronizer.java:81)
	at org.eclipse.swt.widgets.Synchronizer.asyncExec(Synchronizer.java:116)
	at org.eclipse.swt.widgets.Display.asyncExec(Display.java:1020)
	at org.eclipse.swt.internal.widgets.UploadPanel.uploadFailed(UploadPanel.java:280)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadListenerList.notifyUploadFailed(FileUploadListenerList.java:56)
	at org.eclipse.rap.rwt.supplemental.fileupload.FileUploadEvent.dispatchFailed(FileUploadEvent.java:77)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadTracker$InternalFileUploadEvent.dispatchAsFailed(FileUploadTracker.java:98)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadTracker.handleFailed(FileUploadTracker.java:58)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadProcessor.handleFileUpload(FileUploadProcessor.java:62)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadServiceHandler.service(FileUploadServiceHandler.java:54)
	at org.eclipse.rwt.internal.service.ServiceManager$HandlerDispatcher.service(ServiceManager.java:32)
	at org.eclipse.rwt.internal.engine.RWTDelegate.doPost(RWTDelegate.java:44)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.rap.rwt.osgi.internal.CutOffContextPathWrapper.service(CutOffContextPathWrapper.java:103)
	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:317)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Comment 2 Austin Riddle CLA 2011-07-20 13:44:10 EDT
After tracing into the Apache fileupload code it seems that a null pointer is thrown when an attempt to skip the preamble of the request is made. This occurs in FileUploadBase:844.
Comment 3 Ivan Furnadjiev CLA 2011-07-21 03:41:06 EDT
Some additional info:
  - in v14_Maintenance branch the type of the request was org.eclipse.equinox.http.servlet.internal.HttpServletRequestAdaptor
  - in HEAD it is org.eclipse.rap.rwt.osgi.internal.CutOffContextPathWrapper$RequestWrapper
Comment 4 Ivan Furnadjiev CLA 2011-07-21 04:07:18 EDT
(In reply to comment #2)
This is the NPE:
 java.lang.NullPointerException
	at org.eclipse.rwt.internal.uicallback.UICallBackManager.setHasRunnables(UICallBackManager.java:87)
	at org.eclipse.swt.widgets.Synchronizer$1.run(Synchronizer.java:83)
	at org.eclipse.rwt.internal.lifecycle.FakeContextUtil.runNonUIThreadWithFakeContext(FakeContextUtil.java:58)
	at org.eclipse.rwt.lifecycle.UICallBack.runNonUIThreadWithFakeContext(UICallBack.java:51)
	at org.eclipse.swt.widgets.Synchronizer.addLast(Synchronizer.java:81)
	at org.eclipse.swt.widgets.Synchronizer.asyncExec(Synchronizer.java:116)
	at org.eclipse.swt.widgets.Display.asyncExec(Display.java:1020)
	at org.eclipse.swt.internal.widgets.UploadPanel.uploadProgress(UploadPanel.java:241)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadListenerList.notifyUploadProgress(FileUploadListenerList.java:40)
	at org.eclipse.rap.rwt.supplemental.fileupload.FileUploadEvent.dispatchProgress(FileUploadEvent.java:69)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadTracker$InternalFileUploadEvent.dispatchAsProgress(FileUploadTracker.java:90)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadTracker.handleProgress(FileUploadTracker.java:50)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadProcessor$1.update(FileUploadProcessor.java:111)
	at org.apache.commons.fileupload.MultipartStream$ProgressNotifier.notifyListener(MultipartStream.java:135)
	at org.apache.commons.fileupload.MultipartStream$ProgressNotifier.noteBytesRead(MultipartStream.java:124)
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:967)
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
	at java.io.InputStream.read(InputStream.java:85)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
	at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
	at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:619)
	at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:638)
	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:844)
	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:825)
	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:323)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:341)
	at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadProcessor.readUploadedFileItem(FileUploadProcessor.java:74)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadProcessor.handleFileUpload(FileUploadProcessor.java:43)
	at org.eclipse.rap.rwt.supplemental.fileupload.internal.FileUploadServiceHandler.service(FileUploadServiceHandler.java:54)
	at org.eclipse.rwt.internal.service.ServiceManager$HandlerDispatcher.service(ServiceManager.java:32)
	at org.eclipse.rwt.internal.engine.RWTDelegate.doPost(RWTDelegate.java:44)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.rap.rwt.osgi.internal.CutOffContextPathWrapper.service(CutOffContextPathWrapper.java:103)
	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:317)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Comment 5 Ralf Sternberg CLA 2011-07-24 11:41:52 EDT
The cause of this issue was the UICallBackHandler which relied on the existence of a state info, while service handler requests don't get a state info attached. Fixed by adding a null check to UICallBackManager#setHasRunnables. Changes are in CVS HEAD.

Moreover, I opened bug 352954 to add a state info to all requests, not only ui requests.