--- old/src/share/vm/prims/jvm.cpp 2014-11-06 13:33:14.265747690 -0500 +++ new/src/share/vm/prims/jvm.cpp 2014-11-06 13:33:14.174747004 -0500 @@ -1798,7 +1798,17 @@ Handle reflected_method (THREAD, JNIHandles::resolve_non_null(method)); const int num_params = mh->method_parameters_length(); - if (0 != num_params) { + if (num_params < 0) { + // A -1 return value from method_parameters_length means there is no + // parameter data. Return null to indicate this to the reflection + // API. + assert(num_params == -1); + return (jobjectArray)NULL; + } else { + // Otherwise, we return something up to reflection, even if it is + // a zero-length array. Why? Because in some cases this can + // trigger a MalformedParametersException. + // make sure all the symbols are properly formatted for (int i = 0; i < num_params; i++) { MethodParametersElement* params = mh->method_parameters_start(); @@ -1826,8 +1836,6 @@ result->obj_at_put(i, param); } return (jobjectArray)JNIHandles::make_local(env, result()); - } else { - return (jobjectArray)NULL; } } JVM_END