GitHub user Mingun opened a pull request:

    https://github.com/apache/jmeter/pull/394

    Fix IllegalArgumentException for File properties wich allow null value

    ## Description
    This fix the `IllegalArgumentException` when `TestBean` class contains 
nullable `File` field (in my case field has name `vendorSKPath`):
    ```
    2018-08-02 11:42:54,940 DEBUG o.a.j.t.g.GenericTestBeanCustomizer: Property 
vendorSKPath has editor class null
    2018-08-02 11:42:54,941 DEBUG o.a.j.t.g.WrapperEditor: <-java.lang.String:
    2018-08-02 11:42:54,941 DEBUG o.a.j.t.g.WrapperEditor: ->""
    2018-08-02 11:42:54,941 DEBUG o.a.j.t.g.GenericTestBeanCustomizer: Property 
vendorSKPath has property editor 
org.apache.jmeter.testbeans.gui.FileEditor@1f236f6d
    2018-08-02 11:42:54,941 DEBUG o.a.j.t.g.WrapperEditor: <-NULL:null
    2018-08-02 11:42:54,941 WARN o.a.j.g.a.Load: Unexpected error. 
java.lang.IllegalArgumentException
    java.lang.IllegalArgumentException: null
        at 
org.apache.jmeter.testbeans.gui.FieldStringEditor.setValue(FieldStringEditor.java:82)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.WrapperEditor.setValue(WrapperEditor.java:349) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.FileEditor.setValue(FileEditor.java:214) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.GenericTestBeanCustomizer.setEditorValue(GenericTestBeanCustomizer.java:477)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.GenericTestBeanCustomizer.<init>(GenericTestBeanCustomizer.java:289)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.TestBeanGUI.init(TestBeanGUI.java:417) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.testbeans.gui.TestBeanGUI.configure(TestBeanGUI.java:299) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.tree.JMeterTreeModel.addComponent(JMeterTreeModel.java:159)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.tree.JMeterTreeModel.addSubTree(JMeterTreeModel.java:133) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.tree.JMeterTreeModel.addSubTree(JMeterTreeModel.java:133) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.tree.JMeterTreeModel.addSubTree(JMeterTreeModel.java:133) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.tree.JMeterTreeModel.addSubTree(JMeterTreeModel.java:125) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at org.apache.jmeter.gui.GuiPackage.addSubTree(GuiPackage.java:522) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at org.apache.jmeter.gui.action.Load.insertLoadedTree(Load.java:193) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at org.apache.jmeter.gui.action.Load.loadProjectFile(Load.java:130) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at org.apache.jmeter.gui.action.Load.loadProjectFile(Load.java:101) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.action.LoadRecentProject.doActionAfterCheck(LoadRecentProject.java:67)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.action.AbstractActionWithNoRunningTest.doAction(AbstractActionWithNoRunningTest.java:45)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:88) 
~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at 
org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:70)
 ~[ApacheJMeter_core.jar:4.1-SNAPSHOT.20180802]
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
[?:1.8.0_181]
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
[?:1.8.0_181]
        at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_181]
        at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_181]
        at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_181]
        at java.security.AccessController.doPrivileged(Native Method) 
[?:1.8.0_181]
        at 
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
 [?:1.8.0_181]
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_181]
        at 
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
 [?:1.8.0_181]
        at 
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
[?:1.8.0_181]
        at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
 [?:1.8.0_181]
        at 
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
[?:1.8.0_181]
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
[?:1.8.0_181]
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
[?:1.8.0_181]
    ```
    
    ```java
    public class WithFile implements TestBean {
        File file;
        public void setFile(File file) { this.file = file; }
        public File getFile() { return file; }
    }
    
    public class WithFileBeanInfo extends BeanInfoSupport {
        public WithFileBeanInfo() {
            super(WithFile.class);
            property("file");
        }
    }
    ```
    
    ## Motivation and Context
    Though in the comment to the class `FieldStringEditor` it is told that it 
processes only non-null strings:
    
https://github.com/apache/jmeter/blob/0a6f36c6e3c6043587c7765103b1d22354bb55bc/src/core/org/apache/jmeter/testbeans/gui/FieldStringEditor.java#L29-L37
    
    the class `WrappedEditor` can call `setValue` with `null`:
    
https://github.com/apache/jmeter/blob/0a6f36c6e3c6043587c7765103b1d22354bb55bc/src/core/org/apache/jmeter/testbeans/gui/WrapperEditor.java#L332-L349
    
    So I think that comment also need to be updated, but I am not sure. It is 
possible that this class as envisioned shall not allow `null` and it is 
necessary to do fix in other place, but in case of my testing this fix works 
fine.
    
    ## How Has This Been Tested?
    Create plugin with any `TestBean` class with nullable `File` field as show 
above
    
    ## Types of changes
    - Bug fix (non-breaking change which fixes an issue)
    
    ## Checklist:
    - [x] My code follows the [code style][style-guide] of this project.
    - [ ] I have updated the documentation accordingly.
    
    [style-guide]: https://wiki.apache.org/jmeter/CodeStyleGuidelines


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/Mingun/jmeter fix-null-in-field

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/jmeter/pull/394.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #394
    
----
commit 74954718509847375e7aee6ba429ec5e9619f5c2
Author: Mingun <alexander_sergey@...>
Date:   2018-08-02T06:11:29Z

    Fix IllegalArgumentException for File properties wich allow null value

----


---

Reply via email to