net.sf.json.JSONException: JSONObject["publisher"] is not a JSONObject.

Stack Overflow | Vimal Dhupar | 3 months ago
  1. 0

    not a JSONObject exception [jira] [jenkins]

    Stack Overflow | 3 months ago | Vimal Dhupar
    net.sf.json.JSONException: JSONObject["publisher"] is not a JSONObject.
  2. 0

    Cannot register 2nd Server URL

    GitHub | 1 year ago | sgykfjsm
    javax.servlet.ServletException: net.sf.json.JSONException: JSONObject["githubAuth"] is not a JSONObject.
  3. Speed up your debug routine!

    Automated exception search integrated into your IDE

  4. 0

    After updating to the latest jenkins version (v1.536) i get this error when saving a project which has the checkstyle plugin enabled EDIT: It looks like it has to do with missing options in the config (the config hasn't changed for weeks now..) but with a litle bit of guessing i found what options were required. So maybe a fix for this issue could be to have required fields and give the user feedback on what fields he has to fill instead of this raw error {code} javax.servlet.ServletException: java.lang.RuntimeException: Failed to instantiate class hudson.plugins.checkstyle.CheckStylePublisher from {"pattern":"app/build/logs/checkstyle.xml","canRunOnFailed":true,"shouldDetectModules":false,"healthy":"","unHealthy":"","thresholdLimit":"low","unstableTotalAll":"","unstableTotalHigh":"","unstableTotalNormal":"","unstableTotalLow":"","failedTotalAll":"","failedTotalHigh":"","failedTotalNormal":"","failedTotalLow":"","defaultEncoding":"","stapler-class":"hudson.plugins.checkstyle.CheckStylePublisher","kind":"hudson.plugins.checkstyle.CheckStylePublisher","unstableNewAll":"","unstableNewHigh":"","unstableNewNormal":"","unstableNewLow":"","failedNewAll":"","failedNewHigh":"","failedNewNormal":"","failedNewLow":"","useDeltaValues":false,"useStableBuildAsReference":false,"canComputeNew":true} at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:777) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:841) at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:248) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:727) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:841) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:630) at org.kohsuke.stapler.Stapler.service(Stapler.java:224) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) 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 org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:64) 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:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.RuntimeException: Failed to instantiate class hudson.plugins.checkstyle.CheckStylePublisher from {"pattern":"app/build/logs/checkstyle.xml","canRunOnFailed":true,"shouldDetectModules":false,"healthy":"","unHealthy":"","thresholdLimit":"low","unstableTotalAll":"","unstableTotalHigh":"","unstableTotalNormal":"","unstableTotalLow":"","failedTotalAll":"","failedTotalHigh":"","failedTotalNormal":"","failedTotalLow":"","defaultEncoding":"","stapler-class":"hudson.plugins.checkstyle.CheckStylePublisher","kind":"hudson.plugins.checkstyle.CheckStylePublisher","unstableNewAll":"","unstableNewHigh":"","unstableNewNormal":"","unstableNewLow":"","failedNewAll":"","failedNewHigh":"","failedNewNormal":"","failedNewLow":"","useDeltaValues":false,"useStableBuildAsReference":false,"canComputeNew":true} at hudson.model.Descriptor.newInstance(Descriptor.java:578) at hudson.plugins.analysis.core.PluginDescriptor.newInstance(PluginDescriptor.java:102) at hudson.plugins.analysis.core.PluginDescriptor.newInstance(PluginDescriptor.java:30) at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:916) at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:901) at hudson.util.DescribableList.rebuildHetero(DescribableList.java:203) at hudson.model.Project.submit(Project.java:208) at hudson.model.Job.doConfigSubmit(Job.java:1136) at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:787) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:297) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:160) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:95) at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:120) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:727) ... 63 more Caused by: net.sf.json.JSONException: JSONObject["canComputeNew"] is not a JSONObject. at net.sf.json.JSONObject.getJSONObject(JSONObject.java:2006) at hudson.plugins.analysis.core.PluginDescriptor.convertHierarchicalFormData(PluginDescriptor.java:73) at hudson.plugins.analysis.core.PluginDescriptor.newInstance(PluginDescriptor.java:102) at hudson.plugins.analysis.core.PluginDescriptor.newInstance(PluginDescriptor.java:30) at hudson.model.Descriptor$1.instantiate(Descriptor.java:1046) at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:665) at org.kohsuke.stapler.RequestImpl.access$100(RequestImpl.java:81) at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:587) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:400) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:396) at hudson.model.Descriptor.newInstance(Descriptor.java:569) ... 81 more {code}

    Jenkins JIRA | 3 years ago | Jeroen Thora
    javax.servlet.ServletException: java.lang.RuntimeException: Failed to instantiate class hudson.plugins.checkstyle.CheckStylePublisher from {"pattern":"app/build/logs/checkstyle.xml","canRunOnFailed":true,"shouldDetectModules":false,"healthy":"","unHealthy":"","thresholdLimit":"low","unstableTotalAll":"","unstableTotalHigh":"","unstableTotalNormal":"","unstableTotalLow":"","failedTotalAll":"","failedTotalHigh":"","failedTotalNormal":"","failedTotalLow":"","defaultEncoding":"","stapler-class":"hudson.plugins.checkstyle.CheckStylePublisher","kind":"hudson.plugins.checkstyle.CheckStylePublisher","unstableNewAll":"","unstableNewHigh":"","unstableNewNormal":"","unstableNewLow":"","failedNewAll":"","failedNewHigh":"","failedNewNormal":"","failedNewLow":"","useDeltaValues":false,"useStableBuildAsReference":false,"canComputeNew":true}
  5. 0

    I originally reported this under JENKINS-20123 however @sogabe said: {quote} @Peter Mount Periodic-reincarnation-plugin causes your exception. You should create a new ticket. {quote} Here's the original report: I'm getting this as well, effectively causing me to be unable to save any job config. There's no GIT at all on this specific server (we use Mercurial) but again it's only occurred since 1.536 was installed. {code} javax.servlet.ServletException: java.lang.RuntimeException: Failed to instantiate class org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration from {"isEnabled":"false","maxDepth":"","isLocallyConfigured":"false"} at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:777) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:841) at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:248) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:727) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:841) at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:248) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:727) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:841) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:630) at org.kohsuke.stapler.Stapler.service(Stapler.java:224) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) 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 org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:64) 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:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 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.RuntimeException: Failed to instantiate class org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration from {"isEnabled":"false","maxDepth":"","isLocallyConfigured":"false"} at hudson.model.Descriptor.newInstance(Descriptor.java:578) at hudson.model.JobPropertyDescriptor.newInstance(JobPropertyDescriptor.java:71) at org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration$DescriptorImpl.newInstance(JobLocalConfiguration.java:135) at org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration$DescriptorImpl.newInstance(JobLocalConfiguration.java:89) at hudson.util.DescribableList.rebuild(DescribableList.java:173) at hudson.model.Job.doConfigSubmit(Job.java:1129) at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:787) 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.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:297) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:160) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:95) at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:120) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:727) ... 67 more Caused by: net.sf.json.JSONException: JSONObject["isLocallyConfigured"] is not a JSONObject. at net.sf.json.JSONObject.getJSONObject(JSONObject.java:2006) at org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration$DescriptorImpl.newInstance(JobLocalConfiguration.java:123) at org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration$DescriptorImpl.newInstance(JobLocalConfiguration.java:89) at hudson.model.Descriptor$1.instantiate(Descriptor.java:1046) at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:665) at org.kohsuke.stapler.RequestImpl.access$100(RequestImpl.java:81) at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:587) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:400) at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:396) at hudson.model.Descriptor.newInstance(Descriptor.java:569) ... 83 more {code}

    Jenkins JIRA | 3 years ago | Peter Mount
    javax.servlet.ServletException: java.lang.RuntimeException: Failed to instantiate class org.jenkinsci.plugins.periodicreincarnation.JobLocalConfiguration from {"isEnabled":"false","maxDepth":"","isLocallyConfigured":"false"}

    2 unregistered visitors
    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. net.sf.json.JSONException

      JSONObject["publisher"] is not a JSONObject.

      at net.sf.json.JSONObject.getJSONObject()
    2. json-lib
      JSONObject.getJSONObject
      1. net.sf.json.JSONObject.getJSONObject(JSONObject.java:2006)
      1 frame
    3. org.jenkinsci.plugins
      JiraTestDataPublisher$JiraTestDataPublisherDescriptor.validateFieldConfigs
      1. org.jenkinsci.plugins.JiraTestResultReporter.JiraTestDataPublisher$JiraTestDataPublisherDescriptor.validateFieldConfigs(JiraTestDataPublisher.java:518)
      1 frame
    4. Java RT
      Method.invoke
      1. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      2. sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      3. sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      4. java.lang.reflect.Method.invoke(Method.java:498)
      4 frames
    5. Stapler
      Function.bindAndInvoke
      1. org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324)
      2. org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)
      2 frames