public Object get(OgnlContext context, Object target, String propertyName) {
   try {
     return OgnlRuntime.getMethodValue(context, target, propertyName, true);
   } catch (Exception ex) {
     throw new RuntimeException(ex);
   }
 }
  /** Returns OgnlRuntime.NotFound if the property does not exist. */
  public Object getPossibleProperty(Map context, Object target, String name) throws OgnlException {
    Object result;
    OgnlContext ognlContext = (OgnlContext) context;

    if (context.get("_compile") != null) {
      Getter getter = getGetter(ognlContext, target, name);

      if (getter != NotFoundGetter) {
        result = getter.get(ognlContext, target, name);
      } else {
        try {
          result = OgnlRuntime.getFieldValue(ognlContext, target, name, true);
        } catch (Exception ex) {
          throw new OgnlException(name, ex);
        }
      }
    } else {
      result = super.getPossibleProperty(context, target, name);
    }
    return result;
  }
  private Getter getGetter(OgnlContext context, Object target, String propertyName)
      throws OgnlException {
    Getter result;
    Class targetClass = target.getClass();
    Map propertyMap;

    if ((propertyMap = (Map) seenGetMethods.get(targetClass)) == null) {
      propertyMap = new HashMap(101);
      seenGetMethods.put(targetClass, propertyMap);
    }
    if ((result = (Getter) propertyMap.get(propertyName)) == null) {
      try {
        Method method = OgnlRuntime.getGetMethod(context, targetClass, propertyName);

        if (method != null) {
          if (Modifier.isPublic(method.getModifiers())) {
            if (method.getReturnType().isPrimitive()) {
              propertyMap.put(
                  propertyName,
                  result =
                      generateGetter(
                          context,
                          "java.lang.Object\t\tresult;\n"
                              + targetClass.getName()
                              + "\t"
                              + "t0 = ("
                              + targetClass.getName()
                              + ")$2;\n"
                              + "\n"
                              + "try {\n"
                              + "   result = new "
                              + getPrimitiveWrapperClass(method.getReturnType()).getName()
                              + "(t0."
                              + method.getName()
                              + "());\n"
                              + "} catch (java.lang.Exception ex) {\n"
                              + "    throw new java.lang.RuntimeException(ex);\n"
                              + "}\n"
                              + "return result;"));
            } else {
              propertyMap.put(
                  propertyName,
                  result =
                      generateGetter(
                          context,
                          "java.lang.Object\t\tresult;\n"
                              + targetClass.getName()
                              + "\t"
                              + "t0 = ("
                              + targetClass.getName()
                              + ")$2;\n"
                              + "\n"
                              + "try {\n"
                              + "   result = t0."
                              + method.getName()
                              + "();\n"
                              + "} catch (java.lang.Exception ex) {\n"
                              + "    throw new java.lang.RuntimeException(ex);\n"
                              + "}\n"
                              + "return result;"));
            }
          } else {
            propertyMap.put(propertyName, result = DefaultGetter);
          }
        } else {
          propertyMap.put(propertyName, result = NotFoundGetter);
        }
      } catch (Exception ex) {
        throw new OgnlException("getting getter", ex);
      }
    }
    return result;
  }