Zack Elan
updated JENKINS-14576
NullPointerException in hudson.plugins.repo.ChangeLogEntry when using Jenkins API
Change By:
Zack Elan
(25/Jul/12 10:18 PM)
Description:
Stepstoreproduce:-Haveabuildjobthatusestherepoplugin-Runthatjob
suchthatitpullsdownchanges
whereoneormore
commitshadnofileschanged(theseseemtobemergecommitsinourcase)
projectswereadded/removedfromthemanifest
-AccessthatjobthroughtheJenkinsAPIBehavior:-GoingdirectlytothebuildspageinJenkinsworksasIexpect.However,ImusingascriptthataccessesJenkinsthroughitsAPI.WhenItackon/api/jsonor/api/xmltotheURL,Igetthefollowingexception:Causedby:java.lang.NullPointerExceptionathudson.plugins.repo.ChangeLogEntry$1.size(ChangeLogEntry.java:296)atjava.util.AbstractList$Itr.hasNext(AbstractList.java:339)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:180)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:231)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:168)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:231)atorg.kohsuke.stapler.export.Property.writeValue(Property.java:136)atorg.kohsuke.stapler.export.Property.writeTo(Property.java:113)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:179)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Model.writeNestedObjectTo(Model.java:176)atorg.kohsuke.stapler.export.Model.writeTo(Model.java:152)atorg.kohsuke.stapler.ResponseImpl.serveExposedBean(ResponseImpl.java:200)athudson.model.Api.doJson(Api.java:181)atsun.reflect.GeneratedMethodAccessor980.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:597)atorg.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:288)atorg.kohsuke.stapler.Function.bindAndInvoke(Function.java:151)atorg.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:90)atorg.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:111)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:203)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:384)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:241)atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:659)atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:488)atorg.kohsuke.stapler.Stapler.service(Stapler.java:162)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)Lookingatthecode(gitrev3fb046cc),Iseeline296isreturnmodifiedFiles.size()inthismethod: @Override publicCollectionStringgetAffectedPaths(){ returnnewAbstractListString(){ @Override publicStringget(finalintindex){returnmodifiedFiles.get(index).getPath(); } @Override publicintsize(){returnmodifiedFiles.size(); } }; }IfmodifiedFilesisnull,itwouldcausethebehaviorImseeing.
InChangeLog.javathereappeartobe2placeswherenullispassedinasthemodifiedFilesofChangeLogEntry-lines125and133,handlingmanifestaddsandremovals.