Symptom
Your Jenkins spits out a stack trace indicating that some classes are missing its descriptor, like the following.
Sometimes the InvocationTargetException is quite lengthy, so scroll down to see the nested cause that shows the class name that's missing Descriptor.
Nov 29, 2011 4:20:09 PM hudson.ExpressionFactory2$JexlExpression evaluate WARNING: Caught exception evaluating: descriptor.getPropertyType(instance,field).itemTypeDescriptorOrDie. Reason: java.lang.reflect.InvocationTargetException java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314) at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:72) at org.apache.commons.jelly.tags.core.CoreTagLibrary$3.run(CoreTagLibrary.java:134) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.WhenTag.doTag(WhenTag.java:46) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270) ... Caused by: java.lang.AssertionError: class hudson.plugins.git.GitPublisher$TagToPush is missing its descriptor at jenkins.model.Jenkins.getDescriptorOrDie(Jenkins.java:1042) at hudson.model.Descriptor$PropertyType.getItemTypeDescriptorOrDie(Descriptor.java:187) ... 183 more
What does this mean?
This error is complaining that you are using some of the form tags incorrectly. It is currently a warning and non-fatal because otherwise it'll break too many plugins.
What the error is saying that you have some model classes that are used for form binding (those classes that are used in your constructor with the @DataBoundConstructor annotation), and those classes aren't Describable, when they should — making them Describable
allows you to define help files, form validation check methods, and so on correctly.
Solution
Make those model classes Describable
of themselves. That is, have them extend AbstractDescribableImpl, then define a nested Descriptor for itself. Since these are nested auxiliary desriptors, getDisplayName()
can return the empty string.
class TagToPush extends AbstractDescribableImpl<TagToPush> { @DataBoundConstructor public TagToPush(...) { ... } .... @Extension public static class DescriptorImpl extends Descriptor<TagToPush> { public String getDisplayName() { return ""; } } }