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.

Reply via email to