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] 
> <javascript:>> 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] <javascript:>.
>> 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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to