Creating a new "external job" then trying to save it results in this exception being thrown:

      null object
      net.sf.json.JSONException: null object
      	at net.sf.json.JSONObject.verifyIsNull(JSONObject.java:2688)
      	at net.sf.json.JSONObject.getBoolean(JSONObject.java:1918)
      	at hudson.model.Job.checkForEmptyParameters(Job.java:1550)
      	at hudson.model.Job.doConfigSubmit(Job.java:1235)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324)
      	at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:52)
      	at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
      	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)
      	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:100)
      	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
      	at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
      	at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
      	at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:80)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	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 jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
      	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 jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
      	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:67)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
      	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
      	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
      	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
      	at org.eclipse.jetty.server.Server.handle(Server.java:499)
      	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
      	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
      	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
      	at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at java.lang.Thread.run(Unknown Source)
      

          [JENKINS-39700] Saving external job throws "null object"

          JSON from the jenkins.log file:

          WARNING: failed to parse {"name":"test-external","description":"","properties":{"stapler-class-bag":"true","jenkins-model-BuildDiscarderProperty":{"specified":false,"":"0","strategy":{"daysToKeepStr":"","numToKeepStr":"","artifactDaysToKeepStr":"","artifactNumToKeepStr":"","stapler-class<span class="code-quote">":"hudson.tasks.LogRotator","$class<span class="code-quote">":"hudson.tasks.LogRotator"}},"hudson-plugins-copyartifact-CopyArtifactPermissionProperty":{},"jenkins-branch-RateLimitBranchProperty$JobPropertyImpl":{}},"core:apply":"","Jenkins-Crumb":"0a40ba6fd22848ce19a874a2867b15fd"}
          

          Daniel Lo Nigro added a comment - JSON from the jenkins.log file: WARNING: failed to parse { "name" : "test-external" , "description" : ""," properties ":{" stapler- class- bag ":" true "," jenkins-model-BuildDiscarderProperty ":{" specified ": false ," ":" 0 "," strategy ":{" daysToKeepStr ":" "," numToKeepStr ":" "," artifactDaysToKeepStr ":" "," artifactNumToKeepStr ":" "," stapler- class span class="code-quote">":" hudson.tasks.LogRotator "," $ class span class="code-quote">":" hudson.tasks.LogRotator "}}," hudson-plugins-copyartifact-CopyArtifactPermissionProperty ":{}," jenkins-branch-RateLimitBranchProperty$JobPropertyImpl ":{}}," core:apply ":" "," Jenkins-Crumb ":" 0a40ba6fd22848ce19a874a2867b15fd"}

          Daniel Beck added a comment -

          I always thought nobody uses Monitor External Job, but it looks like this may be certain now: If my guess is correct, this is a regression introduced in 1.637, introduced over a year ago… if so, this is amazing.

          Daniel Beck added a comment - I always thought nobody uses Monitor External Job, but it looks like this may be certain now: If my guess is correct, this is a regression introduced in 1.637, introduced over a year ago… if so, this is amazing.

          I've never actually used it before, but it seems like a useful feature to monitor cronjobs running on other systems.

          Daniel Lo Nigro added a comment - I've never actually used it before, but it seems like a useful feature to monitor cronjobs running on other systems.

          Hi Daniel, I actually am using it specifically to monitor cron jobs across multiple servers, but didn't notice this bug as the existing jobs I had setup a year+ back were working fine. Just setting up new ones is an issue, though I can copy existing ones as a workaround.. Just can't change 'discard' old builds options.

          Mathew Gancarz added a comment - Hi Daniel, I actually am using it specifically to monitor cron jobs across multiple servers, but didn't notice this bug as the existing jobs I had setup a year+ back were working fine. Just setting up new ones is an issue, though I can copy existing ones as a workaround.. Just can't change 'discard' old builds options.

          Daniel Beck added a comment -

          Not saying I'm not going to look into this. Quite the opposite in fact, it's clearly broken.

          That said, it's a data point indicating very low popularity.

          Daniel Beck added a comment - Not saying I'm not going to look into this. Quite the opposite in fact, it's clearly broken. That said, it's a data point indicating very low popularity.

          Can't debate that

          Mathew Gancarz added a comment - Can't debate that

          Code changed in jenkins
          User: Daniel Beck
          Path:
          core/src/main/java/hudson/model/Job.java
          http://jenkins-ci.org/commit/jenkins/e43222dde84be0ea7d05647790fedc12d70f8052
          Log:
          [FIX JENKINS-39700] Don't fail when no parameters property for job

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Daniel Beck Path: core/src/main/java/hudson/model/Job.java http://jenkins-ci.org/commit/jenkins/e43222dde84be0ea7d05647790fedc12d70f8052 Log: [FIX JENKINS-39700] Don't fail when no parameters property for job

          Code changed in jenkins
          User: Daniel Beck
          Path:
          core/src/main/java/hudson/model/Job.java
          http://jenkins-ci.org/commit/jenkins/e7e51eeb62f1f235933740f02673fdc3c13102f3
          Log:
          Merge pull request #2660 from daniel-beck/JENKINS-39700

          [FIX JENKINS-39700] Don't fail when no parameters property for job

          Compare: https://github.com/jenkinsci/jenkins/compare/e2e17da128af...e7e51eeb62f1

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Daniel Beck Path: core/src/main/java/hudson/model/Job.java http://jenkins-ci.org/commit/jenkins/e7e51eeb62f1f235933740f02673fdc3c13102f3 Log: Merge pull request #2660 from daniel-beck/ JENKINS-39700 [FIX JENKINS-39700] Don't fail when no parameters property for job Compare: https://github.com/jenkinsci/jenkins/compare/e2e17da128af...e7e51eeb62f1

          Oleg Nenashev added a comment -

          The fix has been integrated towards 2.37

          Oleg Nenashev added a comment - The fix has been integrated towards 2.37

            danielbeck Daniel Beck
            daniel15 Daniel Lo Nigro
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: