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 ---- ---