protected Object getValueBody(OgnlContext context, Object source)
            throws OgnlException
    {
        Object result, root = context.getRoot();
        int count = jjtGetNumChildren();
        Object[] args = OgnlRuntime.getObjectArrayPool().create(count);

        try {
            for(int i = 0; i < count; ++i) {
                args[i] = _children[i].getValue(context, root);
            }
            if (isArray) {
                if (args.length == 1) {
                    try {
                        Class componentClass = OgnlRuntime.classForName(context, className);
                        List sourceList = null;
                        int size;

                        if (args[0] instanceof List) {
                            sourceList = (List) args[0];
                            size = sourceList.size();
                        } else {
                            size = (int) OgnlOps.longValue(args[0]);
                        }
                        result = Array.newInstance(componentClass, size);
                        if (sourceList != null) {
                            TypeConverter converter = context.getTypeConverter();

                            for(int i = 0, icount = sourceList.size(); i < icount; i++) {
                                Object o = sourceList.get(i);

                                if ((o == null) || componentClass.isInstance(o)) {
                                    Array.set(result, i, o);
                                } else {
                                    Array.set(result, i, converter.convertValue(context, null, null, null, o,
                                            componentClass));
                                }
                            }
                        }
                    } catch (ClassNotFoundException ex) {
                        throw new OgnlException("array component class '" + className + "' not found", ex);
                    }
                } else {
                    throw new OgnlException("only expect array size or fixed initializer list");
                }
            } else {
                result = OgnlRuntime.callConstructor(context, className, args);
            }

            return result;
        } finally {
            OgnlRuntime.getObjectArrayPool().recycle(args);
        }
    }