title: java.lang.VerifyError: Incompatible argument to function
body: <p>I have a mavenized Spring 3 project that builds and runs fine on one machine. The <em>exact same</em> project builds fine on a second machine, but when I try to hit a page (one that works fine on the other machine), I get the following stacktrace:</p>
  
  <pre><code>java.lang.VerifyError: (class: org/apache/jsp/tag/web/generate_002dvalidation_tag, method: _jspx_meth_c_005fset_005f13 signature: (Ljavax/servlet/jsp/tagext/JspTag;Ljavax/servlet/jsp/PageContext;[I)Z) Incompatible argument to function
      java.lang.Class.getDeclaredConstructors0(Native Method)
      java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
      java.lang.Class.getConstructor0(Class.java:2699)
      java.lang.Class.newInstance0(Class.java:326)
      java.lang.Class.newInstance(Class.java:308)
      org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:635)
      org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:52)
      org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:685)
      org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
      org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
      org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
      org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
      org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
      org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
      org.apache.jasper.compiler.TagFileProcessor.loadTagFiles(TagFileProcessor.java:703)
      org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:210)
      org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
      org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
      org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
      org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
      org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
      org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
      org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
      org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
      org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
      org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
      org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
      org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
      org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  </code></pre>
  
  <p>The only difference that I can think of is the version of Java. On the machine where the project works, the version is 6 update 17, whereas on the second machine (where the project does not work), the version is 6 update 22. The pom's are exactly the same.</p>
  
  <p>It looks like the problem is centered around a custom tag, but I can't figure out what it is. What could be causing this problem?</p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>I took a look at the target directories on both machines and noticed the following:</p>
  
  <ul>
  <li>On the machine where the project doesn't work, the <code>lib</code> directory has <code>el-api-2.2.jar</code></li>
  <li>On the machine where the project works, there is <code>tomcat</code> directory under <code>target</code> which contains the following:</li>
  </ul>
  
  <pre>
  `-- tomcat
      |-- conf
      |   |-- tomcat-users.xml
      |   `-- web.xml
      |-- logs
      |-- webapps
      `-- work
          `-- localEngine
              `-- localhost
                  `-- _
                      |-- org
                      |   `-- apache
                      |       `-- jsp
                      |           |-- tag
                      |           |   `-- web
                      |           |       |-- generate_002dvalidation_tag.class
                      |           |       `-- generate_002dvalidation_tag.java
                      |           `-- WEB_002dINF
                      |               `-- jsp
                      |                   `-- starship
                      `-- SESSIONS.ser
  </pre>
  
  <p>This directory is not present on the machine where the project works</p>
  
  <ul>
  <li><p>On the machine where the project works, there is a <code>war</code> directory under <code>target</code>, which is not present on the machine where the project does not work (however both machines produce a <code>war</code> file under the <code>target</code> directory)</p></li>
  <li><p>On the machine where the build does not work, the <code>war</code> file is 4,135,195 bytes, whereas on the other it is 4,104,569 bytes. This difference comes from the inclusion of the <code>el-api-2.2.jar</code> file.</p></li>
  </ul>
  
  <p>I'm not sure what this means.</p>