Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-13825

Sounds plugin configuration "System command" is empty

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: sounds-plugin
    • Labels:
      None
    • Environment:
      Jenkins 1.463, Jenkins Sounds plugin 0.4
    • Similar Issues:

      Description

      Jenkins 1.463, Jenkins Sounds Plugin 0.4.

      On the global configuration page, the value of input field "System command" is not saved. Set the value directly in net.hurstfrost.hudson.sounds.HudsonSoundsNotifier.xml and load config from disk seems to temporarily solve the problem. But eventually it becomes emtpy again if the configuration is changed and saved.

      Visiting the configure page causes the following stacktrace in log.

      18.05.2012 15:41:25 hudson.ExpressionFactory2$JexlExpression evaluate
      WARNUNG: Caught exception evaluating: descriptor.getPropertyType(instance,field).itemTypeDescriptorOrDie. Reason: java.lang.reflect.InvocationTargetException
      java.lang.reflect.InvocationTargetException
              at sun.reflect.GeneratedMethodAccessor502.invoke(Unknown Source)
              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)
              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.ChooseTag.doTag(ChooseTag.java:38)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              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)
              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.ChooseTag.doTag(ChooseTag.java:38)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:81)
              at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:146)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              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.OtherwiseTag.doTag(OtherwiseTag.java:41)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              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.ChooseTag.doTag(ChooseTag.java:38)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              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.ForEachTag.doTag(ForEachTag.java:150)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:98)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:270)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:119)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:81)
              at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
              at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
              at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:95)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:574)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:659)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:488)
              at org.kohsuke.stapler.Stapler.service(Stapler.java:162)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
              at winstone.ServletConfiguration.execute(ServletConfiguration.java:248)
              at winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
              at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:376)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:95)
              at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
              at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:171)
              at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:86)
              at org.jvnet.hudson.plugins.monitoring.HudsonMonitoringFilter.doFilter(HudsonMonitoringFilter.java:84)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:98)
              at hudson.plugins.audit_trail.AuditTrailFilter.doFilter(AuditTrailFilter.java:66)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:98)
              at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:87)
              at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
              at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
              at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:47)
              at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
              at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
              at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:63)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
              at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:66)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
              at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
              at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
              at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
              at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
              at winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
              at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
              at winstone.RequestDispatcher.forward(RequestDispatcher.java:331)
              at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:215)
              at winstone.RequestHandlerThread.run(RequestHandlerThread.java:138)
              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
              at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
              at java.util.concurrent.FutureTask.run(FutureTask.java:138)
              at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
              at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
              at java.lang.Thread.run(Thread.java:662)
      Caused by: java.lang.AssertionError: null is missing its descriptor in public hudson.util.CopyOnWriteList hudson.plugins.warnings.WarningsDescriptor.getParsers(). See https://wiki.jenkins-ci.org/display/JENKINS/My+class+is+missing+descriptor
              at hudson.model.Descriptor$PropertyType.getItemTypeDescriptorOrDie(Descriptor.java:198)
              ... 171 more
      

        Attachments

          Activity

          Hide
          dregin Bernard McKeever added a comment -

          I'm seeing the same behavior.

          Extremely annoying.

          Show
          dregin Bernard McKeever added a comment - I'm seeing the same behavior. Extremely annoying.
          Hide
          zhh Hua Zhang added a comment -

          I think the stacktrace in the description was irrelevant to the sounds plugin, because that was clearly a problem of warning plugin, and there is no stacktrace any more in recent versions.
          IIRC, the plugin was broken since v1.463, in this version the new GUI feature was introduced. I suspect this change breaks the persistence of the plugin configuration.

          Show
          zhh Hua Zhang added a comment - I think the stacktrace in the description was irrelevant to the sounds plugin, because that was clearly a problem of warning plugin, and there is no stacktrace any more in recent versions. IIRC, the plugin was broken since v1.463, in this version the new GUI feature was introduced. I suspect this change breaks the persistence of the plugin configuration.
          Hide
          zhh Hua Zhang added a comment -

          It turns out to be a bug in the plugin itself, has nothing to do with core changes as I suspected. The parameters from configure page are not correctly retrieved from the json object.
          The attached patch should fix this bug, and it passed my local test. I also sent a pull quest https://github.com/jenkinsci/sounds-plugin/pull/2 unfortunately the pre-commit build failed due to some Maven issue: https://buildhive.cloudbees.com/job/jenkinsci/job/sounds-plugin/5/console

          Show
          zhh Hua Zhang added a comment - It turns out to be a bug in the plugin itself, has nothing to do with core changes as I suspected. The parameters from configure page are not correctly retrieved from the json object. The attached patch should fix this bug, and it passed my local test. I also sent a pull quest https://github.com/jenkinsci/sounds-plugin/pull/2 unfortunately the pre-commit build failed due to some Maven issue: https://buildhive.cloudbees.com/job/jenkinsci/job/sounds-plugin/5/console
          Hide
          oxcafebabe Ed Hurst-Frost added a comment -

          I've had a look at this, but for all the tests I've run the current code is still correct. I haven't been able to reproduce the systemCommand value coming back in the playMethod object.
          All I can think is that in later versions of Jenkins it does, but I've not found a version that does (I only went up to 400).
          If we apply the suggested patch it will break all old versions.
          If we can find which version causes the bug we can maybe add some version dependent code (yuk!).

          Show
          oxcafebabe Ed Hurst-Frost added a comment - I've had a look at this, but for all the tests I've run the current code is still correct. I haven't been able to reproduce the systemCommand value coming back in the playMethod object. All I can think is that in later versions of Jenkins it does, but I've not found a version that does (I only went up to 400). If we apply the suggested patch it will break all old versions. If we can find which version causes the bug we can maybe add some version dependent code (yuk!).
          Hide
          zhh Hua Zhang added a comment - - edited

          I also suspected that the reason might be the behaviour change of the XML serializaton in some underlying library. IIRC, the plugin config was broken after I upgraded Jenkins, not the plugin itself. My best guess is some version near 1.463 since I upgrade Jenkins quite frequently, so I tend to believe that this occurs between 1.45x - 1.463, of course I could very probably be wrong for its so long time ago.
          I debugged against 1.460, the JSONObject is not a flat structure (was it before?), so playMethod is now a child node of the json object, therefore directly json.optString("systemCommand") would return null.

          Show
          zhh Hua Zhang added a comment - - edited I also suspected that the reason might be the behaviour change of the XML serializaton in some underlying library. IIRC, the plugin config was broken after I upgraded Jenkins, not the plugin itself. My best guess is some version near 1.463 since I upgrade Jenkins quite frequently, so I tend to believe that this occurs between 1.45x - 1.463, of course I could very probably be wrong for its so long time ago. I debugged against 1.460, the JSONObject is not a flat structure (was it before?), so playMethod is now a child node of the json object, therefore directly json.optString("systemCommand") would return null.
          Hide
          oxcafebabe Ed Hurst-Frost added a comment -

          I've pinned it down to 1.445 that makes the breaking change:

          JSON in version 1.444

          {
            "pipeTimeoutSecs": "5",
            "playMethod": {"value": "PIPE"},
            "selectedSound": "",
            "sound": "",
            "soundArchive": "file:/home/ed/Workspace/sounds-plugin/target/classes/sound-archive.zip",
            "systemCommand": "cmd"
          }
          

          JSON in version 1.445

          {
            "playMethod":     {
              "pipeTimeoutSecs": "5",
              "systemCommand": "cmd",
              "value": "PIPE"
            },
            "selectedSound": "",
            "sound": "",
            "soundArchive": "file:/home/ed/Workspace/sounds-plugin/target/classes/sound-archive.zip"
          }
          

          but I can't identify what the change was. The release notes don't show anything that seems relevant:

          What's new in 1.445 (2011/12/26)

          • CLI now supports using HTTP proxy for tunneling its TCP/IP connection.
          • CLI now supports routing TCP/IP requests without going through HTTP reverse proxy.
          • If reload fails, don't let the partially loaded state running, or risk the user overwriting the configs they have. (issue 11204)
          • Update center UI improvement. "Install" button is now always visisble.
          • Configuration UI improvement. "Save" button is always visible.
          • Fixed a bug where a large output from Maven can cause module log output to go out of sync with module build log files.
          • Confusing error message when the --username option is used on the system with the .ssh directory. (issue 11873)
          • Fixed prematurely re-drawn matrix test result graph.

          and mvn dependency:tree differences seem insignificant:

          diff 444-dep-tree 445-dep-tree 
          13,14c13,14
          < [INFO] +- org.jenkins-ci.main:jenkins-war:war:1.444:test
          < [INFO] +- org.jenkins-ci.main:jenkins-core:jar:1.444:provided
          ---
          > [INFO] +- org.jenkins-ci.main:jenkins-war:war:1.445:test
          > [INFO] +- org.jenkins-ci.main:jenkins-core:jar:1.445:provided
          16c16
          < [INFO] |  +- org.jenkins-ci.main:cli:jar:1.444:provided
          ---
          > [INFO] |  +- org.jenkins-ci.main:cli:jar:1.445:provided
          82c82
          < [INFO] |  +- org.jenkins-ci:memory-monitor:jar:1.5:provided
          ---
          > [INFO] |  +- org.jenkins-ci:memory-monitor:jar:1.7:provided
          104,105c104,105
          < [INFO] +- org.jenkins-ci.main:jenkins-test-harness:jar:1.444:test
          < [INFO] |  +- org.jenkins-ci.main:jenkins-war:jar:war-for-test:1.444:test
          ---
          > [INFO] +- org.jenkins-ci.main:jenkins-test-harness:jar:1.445:test
          > [INFO] |  +- org.jenkins-ci.main:jenkins-war:jar:war-for-test:1.445:test
          109c109
          < [INFO] |  +- org.jenkins-ci.main:maven-plugin:jar:1.444:test
          ---
          > [INFO] |  +- org.jenkins-ci.main:maven-plugin:jar:1.445:test
          184c184
          < [INFO] +- org.jenkins-ci.main:ui-samples-plugin:jar:1.444:test
          ---
          > [INFO] +- org.jenkins-ci.main:ui-samples-plugin:jar:1.445:test
          192,193c192,193
          < [INFO] Finished at: Tue May 21 15:11:23 BST 2013
          < [INFO] Final Memory: 84M/1281M
          ---
          > [INFO] Finished at: Tue May 21 15:10:58 BST 2013
          > [INFO] Final Memory: 85M/1281M
          

          I'm not sure whether to switch on Hudson.getVersion(), or auto-sense from the JSON object sturcture.

          Show
          oxcafebabe Ed Hurst-Frost added a comment - I've pinned it down to 1.445 that makes the breaking change: JSON in version 1.444 { "pipeTimeoutSecs" : "5" , "playMethod" : { "value" : "PIPE" }, "selectedSound" : "", "sound" : "", "soundArchive" : "file:/home/ed/Workspace/sounds-plugin/target/classes/sound-archive.zip" , "systemCommand" : "cmd" } JSON in version 1.445 { "playMethod" : { "pipeTimeoutSecs" : "5" , "systemCommand" : "cmd" , "value" : "PIPE" }, "selectedSound" : "", "sound" : "", "soundArchive" : "file:/home/ed/Workspace/sounds-plugin/target/classes/sound-archive.zip" } but I can't identify what the change was. The release notes don't show anything that seems relevant: What's new in 1.445 (2011/12/26) CLI now supports using HTTP proxy for tunneling its TCP/IP connection. CLI now supports routing TCP/IP requests without going through HTTP reverse proxy. If reload fails, don't let the partially loaded state running, or risk the user overwriting the configs they have. (issue 11204) Update center UI improvement. "Install" button is now always visisble. Configuration UI improvement. "Save" button is always visible. Fixed a bug where a large output from Maven can cause module log output to go out of sync with module build log files. Confusing error message when the --username option is used on the system with the .ssh directory. (issue 11873) Fixed prematurely re-drawn matrix test result graph. and mvn dependency:tree differences seem insignificant: diff 444-dep-tree 445-dep-tree 13,14c13,14 < [INFO] +- org.jenkins-ci.main:jenkins-war:war:1.444:test < [INFO] +- org.jenkins-ci.main:jenkins-core:jar:1.444:provided --- > [INFO] +- org.jenkins-ci.main:jenkins-war:war:1.445:test > [INFO] +- org.jenkins-ci.main:jenkins-core:jar:1.445:provided 16c16 < [INFO] | +- org.jenkins-ci.main:cli:jar:1.444:provided --- > [INFO] | +- org.jenkins-ci.main:cli:jar:1.445:provided 82c82 < [INFO] | +- org.jenkins-ci:memory-monitor:jar:1.5:provided --- > [INFO] | +- org.jenkins-ci:memory-monitor:jar:1.7:provided 104,105c104,105 < [INFO] +- org.jenkins-ci.main:jenkins-test-harness:jar:1.444:test < [INFO] | +- org.jenkins-ci.main:jenkins-war:jar:war- for -test:1.444:test --- > [INFO] +- org.jenkins-ci.main:jenkins-test-harness:jar:1.445:test > [INFO] | +- org.jenkins-ci.main:jenkins-war:jar:war- for -test:1.445:test 109c109 < [INFO] | +- org.jenkins-ci.main:maven-plugin:jar:1.444:test --- > [INFO] | +- org.jenkins-ci.main:maven-plugin:jar:1.445:test 184c184 < [INFO] +- org.jenkins-ci.main:ui-samples-plugin:jar:1.444:test --- > [INFO] +- org.jenkins-ci.main:ui-samples-plugin:jar:1.445:test 192,193c192,193 < [INFO] Finished at: Tue May 21 15:11:23 BST 2013 < [INFO] Final Memory: 84M/1281M --- > [INFO] Finished at: Tue May 21 15:10:58 BST 2013 > [INFO] Final Memory: 85M/1281M I'm not sure whether to switch on Hudson.getVersion() , or auto-sense from the JSON object sturcture.
          Hide
          zhh Hua Zhang added a comment -

          I personally think auto-sense is a little bit better than Hudson.getVersion(). Or is it possible to reorgnize the config page, so that the same json structure can be produced for all versions?

          Show
          zhh Hua Zhang added a comment - I personally think auto-sense is a little bit better than Hudson.getVersion(). Or is it possible to reorgnize the config page, so that the same json structure can be produced for all versions?
          Hide
          deniscostadsc Denis Costa added a comment -

          Hi everyone.
          This issue is a big deal for me, so I'm willing to pay USD 5.00 for it.
          This offer is registered on FreedomSponsors (http://www.freedomsponsors.org/core/issue/315/sounds-plugin-configuration-system-command-is-empty).
          If you solve it (according to the acceptance criteria described there), please register on FreedomSponsors and mark it as resolved there
          I'll then check it out and gladly pay up!

          Oh, and if anyone else also wants throw in a few bucks on this, you should check out FreedomSponsors!

          Show
          deniscostadsc Denis Costa added a comment - Hi everyone. This issue is a big deal for me, so I'm willing to pay USD 5.00 for it. This offer is registered on FreedomSponsors ( http://www.freedomsponsors.org/core/issue/315/sounds-plugin-configuration-system-command-is-empty ). If you solve it (according to the acceptance criteria described there), please register on FreedomSponsors and mark it as resolved there I'll then check it out and gladly pay up! Oh, and if anyone else also wants throw in a few bucks on this, you should check out FreedomSponsors!
          Hide
          cafebabe Ed Hurst-Frost added a comment -

          New version 0.4.1 : Switches on Hudson.getVersion() to correctly parse POST to /configure.

          Show
          cafebabe Ed Hurst-Frost added a comment - New version 0.4.1 : Switches on Hudson.getVersion() to correctly parse POST to /configure.
          Hide
          deniscostadsc Denis Costa added a comment -
          Show
          deniscostadsc Denis Costa added a comment - Hey I have to pay some one! Plz get your money here: http://freedomsponsors.org/core/issue/315/sounds-plugin-configuration-system-command-is-empty

            People

            • Assignee:
              oxcafebabe Ed Hurst-Frost
              Reporter:
              zhh Hua Zhang
            • Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: