FileUploadField.onDetach() causes IllegalStateException()
---------------------------------------------------------

                 Key: WICKET-2045
                 URL: https://issues.apache.org/jira/browse/WICKET-2045
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.4-RC1
         Environment: Linux ubuntu 2.6.24-23-generic #1 SMP Thu Nov 27 18:13:46 
UTC 2008 x86_64 GNU/Linux
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)

            Reporter: Andy Thomson
            Priority: Minor



This was detected when using the example/sample Upload demo locally.

ERROR - RequestCycle               - there was an error cleaning up target 
org.apache.wicket.request.target.component.listener.listenerinterfacerequesttar...@-20665159[page
 class = org.apache.wicket.examples.upload.UploadPage, id = 0, version = 
0]->simpleUpload->interface 
org.apache.wicket.markup.html.form.IFormSubmitListener.IFormSubmitListener 
(request paramaters: [RequestParameters  componentPath=0:simpleUpload 
pageMapName=null versionNumber=0 interfaceName=IFormSubmitListener 
componentId=null behaviorId=null urlDepth=-1 parameters={} 
onlyProcessIfPathActive=false]).
java.lang.IllegalStateException: Attempt to set model object on null model of 
component: simpleUpload:fileInput
        at 
org.apache.wicket.Component.setDefaultModelObject(Component.java:2962)
        at 
org.apache.wicket.markup.html.form.FormComponent.setModelObject(FormComponent.java:1652)
        at 
org.apache.wicket.markup.html.form.upload.FileUploadField.onDetach(FileUploadField.java:175)

Looking at the source indicates that unless onDetach() is over-ridden the 
default will always generate this exception. Here is the source for the 
FileUpLoadField.onDetach().  The line that creates the exception is noted by 
the "<<<HERE" in the snippet below.

FileUpLoadField.onDetach() snippet:

        /**
         * Clean up at the end of the request. This means closing all 
inputstreams which might have been
         * opened from the fileUpload.
         * 
         * @see org.apache.wicket.Component#onDetach()
         */
        @Override
        protected void onDetach()
        {
                if (fileUpload != null && forceCloseStreamsOnDetach())
                {
                        fileUpload.closeStreams();
                        fileUpload = null;
                        setModelObject(null);   <<<HERE
                }
                super.onDetach();
        }

Drilling further down, the setModelObject() calls 
FormComponent.setModelObject(), which in turns calls 
Component.setDefaultModelObject().  Inside setDefaultModelObject(), a check is 
done to see if the model object is null, if it is, it throws an exception:

        public final Component setDefaultModelObject(final Object object)
        {
                final IModel<Object> model = (IModel<Object>)getDefaultModel();

                // Check whether anything can be set at all
                if (model == null)
                {
                        throw new IllegalStateException(
                                "Attempt to set model object on null model of 
component: " + getPageRelativePath());
                }
               ...
}





-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to