title: java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo with embedded jetty with jsp support
body: <p>Per instructions found in here <a href="https://stackoverflow.com/questions/29572781/embedded-jetty-unable-to-parse-web-xml-when-jsp-jars-present-in-classpath/29584588#29584588">embedded jetty unable to parse web.xml when jsp jars present in classpath</a>
  I put together the following startup code to launch jetty with jsp support in embedded mode but still having no luck. I'm gettign the following error, full stack provided farther below:</p>
  
  <pre><code>java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.&lt;init&gt;(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
  </code></pre>
  
  <p>The class in question, javax.servlet.jsp.tagext.TagAttributeInfo, is defined in org.mortbay.jasper.apache-jsp-8.0.9.M3.jar. This jar is also required for other reason, to bring in the class JasperInitializer, superclass of JettyJasperInitializer.</p>
  
  <p>I'm suspecting that using the jar org.mortbay.jasper.apache-jsp-8.0.9.M3.jar is not recommended for jetty 9.2.10.v20150310. If so - what's the alternative?
  Wher should I get org.apache.jasper.servlet.JasperInitializer and javax.servlet.jsp.tagext.TagAttributeInfo?</p>
  
  <pre><code>java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.&lt;init&gt;(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
  at org.apache.tomcat.util.descriptor.tld.TldRuleSet$Attribute.toTagAttributeInfo(TldRuleSet.java:272)
  at org.apache.tomcat.util.descriptor.tld.TldRuleSet$TagAttributeRule.end(TldRuleSet.java:150)
  at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:959)
  at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
  at org.apache.xerces.impl.dtd.XMLNSDTDValidator.endNamespaceScope(Unknown Source)
  at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
  at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
  at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
  at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
  at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
  at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
  at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
  at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
  at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1457)
  at org.apache.tomcat.util.descriptor.tld.TldParser.parse(TldParser.java:76)
  at org.apache.jasper.servlet.TldScanner.parseTld(TldScanner.java:257)
  at org.apache.jasper.servlet.TldPreScanned.scanJars(TldPreScanned.java:46)
  at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:99)
  at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:103)
  at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:140)
  at org.eclipse.jetty.annotations.ServletContainerInitializersStarter.doStart(ServletContainerInitializersStarter.java:65)
  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
  at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:274)
  at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
  at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
  at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
  at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
  at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
  at org.eclipse.jetty.server.Server.start(Server.java:387)
  at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
  at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
  at org.eclipse.jetty.server.Server.doStart(Server.java:354)
  at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
  at webappdev.JettyWebAppTest.init(JettyWebAppTest.java:140)
  at webappdev.JettyWebAppTest.main(JettyWebAppTest.java:148)
  </code></pre>
  
  <p>My startup code:</p>
  
  <pre class="lang-java prettyprint-override"><code> public static void main(String[] args) throws Exception
   {
      JettyWebAppTest thiss = new JettyWebAppTest();
      thiss.init();
   }
  
  
  private void init() throws Exception {
  
      System.setProperty("java.io.tmpdir", "/tmp/bolek");
      System.setProperty("org.apache.jasper.compiler.disablejsr199", "false");
      Server server = new Server(8080);
  
      WebAppContext context = new WebAppContext();
  
      context.setResourceBase(&lt;myresourcebase&gt;);
      context.setDescriptor("/WEB-INF/web.xml");
  
      context.setContextPath("/");
      context.setParentLoaderPriority(false);
      context.setAttribute(
       "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
         ".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/.*taglibs.*\\.jar$");
  
  
      context.setAttribute("javax.servlet.context.tempdir", 
              System.getProperty("java.io.tmpdir"));
  
      context.setAttribute("org.eclipse.jetty.containerInitializers",
           this.jspInitializers());
      context.setAttribute(InstanceManager.class.getName(),
              new SimpleInstanceManager());
      context.addBean(new ServletContainerInitializersStarter(context),
            true);
  
      context.setClassLoader(this.getUrlClassLoader());
  
      context.addServlet(this.jspServletHolder(), "*.jsp");
  
  
      server.setHandler(context);
  
      server.start();
      server.join();      
   }
  
  
   private ServletHolder defaultServletHolder(URI baseUri)
  {
      ServletHolder holderDefault = new ServletHolder("default",
            DefaultServlet.class);
  
      holderDefault.setInitParameter("resourceBase", 
          baseUri.toASCIIString());
      holderDefault.setInitParameter("dirAllowed", "true");
      return holderDefault;
  }
  
  
   private List&lt;ContainerInitializer&gt; jspInitializers()
   {
      JettyJasperInitializer sci = new JettyJasperInitializer();
      ServletContainerInitializer scii;
      scii = (ServletContainerInitializer)sci;
  
      ContainerInitializer initializer = new ContainerInitializer(scii, null);
      List&lt;ContainerInitializer&gt; initializers = new ArrayList&lt;ContainerInitializer&gt;();
      initializers.add(initializer);
      return initializers;
   }
  
  
   private ClassLoader getUrlClassLoader()
   {
      ClassLoader jspClassLoader = new URLClassLoader(new URL[0], this.getClass().getClassLoader());
      return jspClassLoader;
   }
  
  
  
  
  private ServletHolder jspServletHolder()
  {
      ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
      holderJsp.setInitOrder(0);
      holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
      holderJsp.setInitParameter("fork", "false");
      holderJsp.setInitParameter("xpoweredBy", "false");
      holderJsp.setInitParameter("compilerTargetVM", "1.7");
      holderJsp.setInitParameter("compilerSourceVM", "1.7");
      holderJsp.setInitParameter("keepgenerated", "true");
      return holderJsp;
  }
  </code></pre>
  
  <p>web.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;web-app 
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"&gt;
   &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
   &lt;/welcome-file-list&gt;
  &lt;/web-app&gt;
  </code></pre>