<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<j:jelly xmlns:j="jelly:core">

    <j:if test="${test.Integer.MAX_VALUE}">
        <j:getStatic var="value" className="java.lang.Integer"
                     field="MAX_VALUE"/>
    </j:if>

    <j:if test="${test.InvalidGet}">
        <j:getStatic var="value" className="java.lang.Integer"
                     field="FOOBAR"/>
    </j:if>

</j:jelly>
