DataBoundConstructor is called when the confguration screen is POSTed. XStream deserialization is done when the item is being loaded from disk.
On Tue, Apr 26, 2016 at 5:43 AM Jens Keller <[email protected]> wrote: > Hi Robert, > > I see...this makes sense, thanks a lot!! > > Currently I have a hard time reproducing the issue, can you tell me under > which circumstances the data-bound constructor is invoked, and when the > "readResolved" / XStream deserialization is being used? > > Ideally I will also write a regression test for this, therefore it would > be good to know. > > Best regards > Jens > > > Am Dienstag, 26. April 2016 14:30:36 UTC+2 schrieb Robert Sandell: > >> XStream deserialization is not using the constructor, and since the >> innerScm field is transient the field won't be on disk. >> You should recreate it in a readResolve method. >> >> /B >> > On Tue, Apr 26, 2016 at 12:26 PM, Jens Keller <[email protected]> wrote: >> > Hi, >>> >>> I wrote an SCM plugin some time ago and from time to time it is throwing >>> a NullPointerException at the following location: >>> @Override >>> public boolean checkout(AbstractBuild<?, ?> build, Launcher launcher, >>> FilePath workspace, BuildListener listener, File changelogFile) throws >>> IOException, InterruptedException { >>> return innerScm.checkout(new FilePath(changelogFile), >>> getRevisionStateFileFileForBuild(build), workspace); >>> } >>> >>> >>> I'm using "innerScm" to have an internal API that is easier to unit-test >>> for me, and in the "outer" scm there is basically only this adapter code. >>> >>> What is null is the "innerScm". >>> I also see Null pointer exceptions thrown at this location sometimes: >>> >>> @Override >>> >>> public ChangeLogParser createChangeLogParser() { >>> >>> return new ChangeLogParser() { >>> >>> @SuppressWarnings("rawtypes") >>> >>> @Override >>> >>> public ChangeLogSet<? extends Entry> parse( >>> AbstractBuild build, File changelogFile) throws IOException { >>> >>> return new HanaChangeLogSet(build, >>> innerScm.parseChangeLog(changelogFile)); >>> >>> } >>> >>> }; >>> >>> } >>> >>> I don't understand how this can happen, because I only have the >>> following constructor: >>> >>> private final transient DatabaseInnerSCM innerScm; >>> >>> @DataBoundConstructor >>> public DatabaseSCM(String connection, String objectFilter, boolean >>> shouldDownloadContent, RepositoryBrowser<HanaChangeLogSet.Entry> browser >>> ) { >>> this.connection = connection; >>> this.objectFilter = objectFilter; >>> this.shouldDownloadContent = shouldDownloadContent; >>> this.browser = browser; >>> >>> Repository repository = new SQLRepository(new SQLConnectionProviderImpl >>> ()); >>> >>> ObjectFilter[] filters = new ObjectFilterParser().parseMultiple(this. >>> objectFilter); >>> >>> this.innerScm = new DatabaseInnerSCM(repository, filters, >>> shouldDownloadContent); >>> } >>> >>> >>> So from the code I don't see how this could become null when going >>> through the constructor. >>> >>> Does the Jenkins framework have any other way to assign the field than >>> using the data-bound constructor? >>> >>> >>> Best regards >>> >>> Jens >>> >> -- >>> You received this message because you are subscribed to the Google >>> Groups "Jenkins Developers" group. >>> >> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >> >> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/jenkinsci-dev/1c092fb3-893d-4526-80a5-4e68d1136f76%40googlegroups.com >>> <https://groups.google.com/d/msgid/jenkinsci-dev/1c092fb3-893d-4526-80a5-4e68d1136f76%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Robert Sandell >> *Software Engineer* >> *CloudBees Inc.* >> > -- > You received this message because you are subscribed to the Google Groups > "Jenkins Developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jenkinsci-dev/fef93382-7f77-43a9-8071-32ba0810066f%40googlegroups.com > <https://groups.google.com/d/msgid/jenkinsci-dev/fef93382-7f77-43a9-8071-32ba0810066f%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/CAPiUgVe5u8nv%3DQ%2BVxgh9%2BQMifzykgw8bZ8Pun2uQnbTbX_HB6w%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
