No check for null: public String[] mapFileName(String sourceFileName) { String result = FileUtils.readFully(helper.getAssembledReader()); !!! if (result.length() == 0) { return null; change to: if (result==null || result.length() == 0) { java.lang.NullPointerException at org.apache.tools.ant.types.mappers.FilterMapper.mapFileName(FilterMapper.java:74) at org.apache.tools.ant.util.CompositeMapper.mapFileName(CompositeMapper.java:38) at gekis.ant.taskdefs.Append.buildMap(Append.java:691) at gekis.ant.taskdefs.Append.scan(Append.java:630) at gekis.ant.taskdefs.Append.execute(Append.java:513) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:357) at org.apache.tools.ant.Target.performTasks(Target.java:385) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) at org.apache.tools.ant.Project.executeTargets(Project.java:1181) at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416) at gekis.ant.process.StepsProcessor.execute(StepsProcessor.java:136) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:357) at org.apache.tools.ant.Target.performTasks(Target.java:385) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) at org.apache.tools.ant.Project.executeTarget(Project.java:1298) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1181) at org.apache.tools.ant.Main.runBuild(Main.java:698) at org.apache.tools.ant.Main.startAnt(Main.java:199) at org.apache.tools.ant.Main.start(Main.java:161) at org.apache.tools.ant.Main.main(Main.java:250)
Yes, FileUtils.readFully() can return null for empty files. I would rather change FileUtils.readFully() rather that have all the clients do the null check stepdance.
Thanks for the report, I fixed FileUtils.readFully to do the right thing. Will be in the next ant release.