[
https://issues.apache.org/jira/browse/WICKET-6250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15539204#comment-15539204
]
ASF subversion and git services commented on WICKET-6250:
---------------------------------------------------------
Commit 30d2669eed71f34b3dabd0870380d1504b6edac9 in wicket's branch
refs/heads/wicket-7.x from [~svenmeier]
[ https://git-wip-us.apache.org/repos/asf?p=wicket.git;h=30d2669 ]
WICKET-6250 always clear reference to fileUploads in onDetach()
> FileUploadField does not deteach models and fails to null the reference to
> the transient fileUploads field if forceCloseStreamsOnDetach is false
> ------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: WICKET-6250
> URL: https://issues.apache.org/jira/browse/WICKET-6250
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 6.24.0
> Reporter: Torsten Krah
> Labels: file_upload
>
> FileUpload does not clear our references and its model when the
> forceCloseStreamsOnDetach is false - which does not match the expectation
> from the javadoc:
> {code}
> /**
> * The FileUploadField will close any input streams you have opened in its
> FileUpload by
> * default. If you wish to manage the stream yourself (e.g. you want to use
> it in another
> * thread) then you can override this method to prevent this behavior.
> *
> * @return <code>true</code> if stream should be closed at the end of
> request
> */
> {code}
> So it just is about not closing the streams.
> However the fileupload component does not only *not* close the streams - it
> also *fails* (if you return false from the *forceCloseStreamsOnDetach*
> method) to reset the model and forget about the current file uploads cached
> in the transient fileUploads variable.
> {code}
> protected void onDetach()
> {
> if ((fileUploads != null) && forceCloseStreamsOnDetach())
> {
> for (FileUpload fu : fileUploads)
> {
> fu.closeStreams();
> }
> fileUploads = null;
>
> if (getModel() != null)
> {
> getModel().setObject(null);
> }
> }
> super.onDetach();
> }
> {code}
> Shouldn't that read more like this:
> {code}
> protected void onDetach()
> {
> if ((fileUploads != null))
> {
> if(forceCloseStreamsOnDetach() {
> for (FileUpload fu : fileUploads)
> {
> fu.closeStreams();
> }
> }
> fileUploads = null;
>
> if (getModel() != null)
> {
> getModel().setObject(null);
> }
> }
> super.onDetach();
> }
> {code}
> In this case my streams wouldn't be closed but you could provide new streams
> in the next request.
> As the variable is private and i don't want to close the stream i have to use
> reflection at the moment to reset the field to null in an overridden
> onDeteach().
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)