title: javax.el.PropertyNotFoundException, why does xAxis not match with getXAxis
body: <p>EL 2.2 in Tomcat 7 throws </p>
  
  <pre><code>javax.el.PropertyNotFoundException: Property 'xAxis' not found on type ...
  </code></pre>
  
  <p>when I try to access the following propery</p>
  
  <pre><code>private XAxis xAxis;
  
  public XAxis getXAxis() {
    return xAxis;
  }
  </code></pre>
  
  <p>like so</p>
  
  <pre><code>${bean.xAxis}
  </code></pre>
  
  <p>in a JSP.</p>
  
  <p>In my understanding of both the JavaBeans and the EL spec <code>getXAxis</code> is the proper accessor for the <code>xAxis</code> property. Lombok agrees with me, it also generates a <code>getXAxis</code> method. The "Getter and Setter" generator in Eclipse, however, disagrees as it generates <code>getxAxis</code>.</p>
  
  <p><strong>Update</strong></p>
  
  <p>I meanwhile found out a few things:</p>
  
  <ul>
  <li>there's a <a href="https://code.google.com/p/projectlombok/issues/detail?id=722" rel="nofollow noreferrer">'won't fix' issue for Lombok</a> for this case</li>
  <li>all 3 major IDEs seem to generate <code>getxAxis</code></li>
  <li>there's a <a href="http://dertompson.com/2013/04/29/java-bean-getterssetters/" rel="nofollow noreferrer">nice blog post</a> dedicated to this corner case, it's referenced in <a href="https://stackoverflow.com/a/16146215/131929">https://stackoverflow.com/a/16146215/131929</a> and quotes chapter 8.8 of the Java Beans spec</li>
  </ul>
  
  <p>Still, I fail to understand how chapter 8.8 of the Java Beans spec is applicable here as it describes different cases. To me this looks much more of an implementation detail of <code>java.beans.Introspector#decapitalize</code> than a clearly defined behavior.</p>
  
  <pre><code>public static String decapitalize(String name) {
      if (name == null || name.length() == 0) {
          return name;
      }
      if (name.length() &gt; 1 &amp;&amp; Character.isUpperCase(name.charAt(1)) &amp;&amp;
                      Character.isUpperCase(name.charAt(0))){
          return name;
      }
      char chars[] = name.toCharArray();
      chars[0] = Character.toLowerCase(chars[0]);
      return new String(chars);
  }
  </code></pre>
  
  <p>The spec says</p>
  
  <blockquote>
    <p>Thus when we extract a property or event name from the middle of an
    existing Java name, we normally convert the first character to lower
    case. However to support the occasional use of all upper-case names,
    we check if the first two characters of the name are both upper case
    and if so leave it alone. So for example,</p>
    
    <p>“FooBah” becomes “fooBah”</p>
    
    <p>“Z” becomes “z”</p>
    
    <p>“URL” becomes “URL”</p>
  </blockquote>
  
  <p>But "if the first two characters of the name are both upper case" doesn't apply here.</p>
  
  <p>What am I missing?</p>