Hello list,

as described in earlier mail, I've moved the descriptor implementation
of my plugin in an other class:
org.jenkinsci.plugins.darcs.DarcsScm$DescriptorImpl ->
org.jenkinsci.plugins.darcs.DarcsScmDescriptor.

Problem is the global configuration file in the HUDSON_HOME:
org.jenkinsci.plugins.darcs.DarcsScm.xml. This file contains:
<?xml version='1.0' encoding='UTF-8'?>
<org.jenkinsci.plugins.darcs.DarcsScm_-DescriptorImpl>
  <generation>1</generation>
  <darcsExe>/usr/local/bin/darcs</darcsExe>
</org.jenkinsci.plugins.darcs.DarcsScm_-DescriptorImpl>

Which will cause error of course. After reading
https://wiki.jenkins-ci.org/display/JENKINS/Architecture and talkin on
IRC I came up with this solution:

public class DarcsScm extends SCM implements Serializable {
  // ...
  @Initializer(before = InitMilestone.PLUGINS_STARTED)
  public static void addAliases() {
    Jenkins.XSTREAM2.addCompatibilityAlias(
      "org.jenkinsci.plugins.darcs.DarcsScm.DescriptorImpl",
      DarcsScmDescriptor.class);
  }
}

But does not work. Jenkins can not deserialize/load XML with the old
class in the root tag. Always got this exception:
Error injecting constructor,
com.thoughtworks.xstream.mapper.CannotResolveClassException:
org.jenkinsci.plugins.darcs.DarcsScm$DescriptorImpl :
org.jenkinsci.plugins.darcs.DarcsScm$DescriptorImpl
  at
org.jenkinsci.plugins.darcs.DarcsScmDescriptor.<init>(DarcsScmDescriptor.java:66)

Full exception here: http://pastebin.com/xbq6BAWV

I've also tried this:
Jenkins.XSTREAM2.addCompatibilityAlias("org.jenkinsci.plugins.darcs.DarcsScm_-DescriptorImpl",
DarcsScmDescriptor.class);
Jenkins.XSTREAM2.addCompatibilityAlias("org.jenkinsci.plugins.darcs.DarcsScm$DescriptorImpl",
DarcsScmDescriptor.class);

I've also tried Items.XSTREAM2 and Run.XSTREAM2, albeit kohsuke said
that I should use Jnekins.XSTREAM2. And I've tried @Initializer(before =
InitMilestone.PLUGINS_LISTED) and @Initializer(before =
InitMilestone.PLUGINS_PREPARED)

I can circumvent the exception if I add the old descriptor extending the
new one in DarcsScm:

@Deprecated
public static class DescriptorImpl extends DarcsScmDescriptor {}

But the old config will not be loaded. Then in Jenkins configuration
site always the default values are displayed.

Can someone please point me out what I'm doing wrong?

Full code available here:
https://github.com/Weltraumschaf/darcs-plugin/blob/master/src/main/java/org/jenkinsci/plugins/darcs/DarcsScm.java

Kind Regards
-Sven
-- 
About: https://www.weltraumschaf.de/

Attachment: smime.p7s
Description: S/MIME Kryptografische Unterschrift

Reply via email to