You want something like this:

-----

public class MySecurityRealm extends SecurityRealm {
    private MyConfiguration configuration;
    private transient String clientId;
    private transient Secret clientSecret;

    private Object readResolve() {
      if (clientId != null || clientSecret != null) {
        this.configuration = new MyConfiguration(…)
        clientId = null;
        clientSecret = null;
      }
      return this;
    }

    @DataBoundConstructor
    public MySecurityRealm(String clientId, String clientSecret) {
        this.configuration = new MyConfiguration(
          Util.fixEmptyAndTrim(clientId),
          Secret.fromString(Util.fixEmptyAndTrim(clientSecret))
        );
    }
}

-----

For examples, search for readResolve in Jenkins and plugin source code.


> On 8. Jul 2020, at 15:57, Goyot, Martin <[email protected]> wrote:
> 
> Sure,
> 
> so the old version was:
> 
> public class MySecurityRealm extends SecurityRealm {
>     private String clientId;
>     private Secret clientSecret;
> 
>     @DataBoundConstructor
>     public MySecurityRealm(String clientId, String clientSecret) {
>         this.clientId = Util.fixEmptyAndTrim(clientId);
>         this.setClientSecret(Util.fixEmptyAndTrim(clientSecret));
>     }
> }
> 
> And the new is:
> 
> 
> public class MySecurityRealm extends SecurityRealm {
>     private MyConfiguration configuration;
> 
>     @DataBoundConstructor
>     public MySecurityRealm(String clientId, String clientSecret) {
>         this.configuration = new MyConfiguration(
>           Util.fixEmptyAndTrim(clientId),
>           Secret.fromString(Util.fixEmptyAndTrim(clientSecret))
>         );
>     }
> }
> 
> Something along those lines.
> 
> Le mer. 8 juil. 2020 à 15:50, Ullrich Hafner <[email protected]> a 
> écrit :
> https://wiki.jenkins.io/display/JENKINS/Hint+on+retaining+backward+compatibility
> 
> It would help if you could describe the exact changes in your class (old vs. 
> new version).
> 
>> Am 08.07.2020 um 10:51 schrieb Goyot, Martin <[email protected]>:
>> 
>> Thanks Ullrich!
>> 
>> Do you have any pointer for me as to how to proceed?
>> 
>> Le mer. 8 juil. 2020 à 10:34, Ullrich Hafner <[email protected]> a 
>> écrit :
>> 
>> 
>>> Am 08.07.2020 um 10:16 schrieb Goyot, Martin <[email protected]>:
>>> 
>>> Hi there,
>>> 
>>> On the OAuth plugin I'm working on, I'd like to modify the 
>>> @DataboundConstructor for the Realm. Issue is, if I modify it, whether be 
>>> the signature or the inners of the function, the deserialization for 
>>> previous instances won't work anymore hence breaking any previous 
>>> installation of the plugin.
>>> 
>>> How am I supposed to proceed in such particular cases, when I need to 
>>> update this constructor without breaking any config already set on Jenkins 
>>> instances?
>>> 
>> 
>> The serialization does not use the constructor. You need to provide a 
>> readResolve method that will map the old fields to the new fields.
>> 
>>> Here is some code for reference:
>>> 
>>> public class MySecurityRealm extends SecurityRealm {
>>>     private String clientId;
>>>     private Secret clientSecret;
>>> 
>>>     @DataBoundConstructor
>>>     public MySecurityRealm(String clientId, String clientSecret) {
>>>         this.clientId = Util.fixEmptyAndTrim(clientId);
>>>         this.setClientSecret(Util.fixEmptyAndTrim(clientSecret));
>>>     }
>>> }
>>> 
>>> Thanks in advance !
>>> Martin
>>> 
>>> -- 
>>> 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/CA%2Bb6JB-wx%3D%2BPRcXb057-9idgZkL7kYw%3DSvmSsaR-mxRJ9_g96A%40mail.gmail.com.
>> 
>> 
>> -- 
>> 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/E316B1D7-CCBE-4BCE-A50C-E64A53A88E68%40gmail.com.
>> 
>> -- 
>> 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/CA%2Bb6JB8J4-AHbMyb%3DWDATiXGvtnuw6YcEcB-pV0SPc4Ju6xNkA%40mail.gmail.com.
> 
> 
> -- 
> 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/1C9C0447-9863-4833-A03A-9EF3ADC9872A%40gmail.com.
> 
> -- 
> 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/CA%2Bb6JB9Bz-YyMi9oC1mrRWZdDtteCszf7FmpCOxHEQLRmrKRQw%40mail.gmail.com.

-- 
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/28EB61A5-5DFF-4BC4-8CEF-4C13FDDD7D52%40beckweb.net.

Reply via email to