diff --git a/kyuubi-util-scala/src/main/scala/org/apache/kyuubi/util/reflect/ReflectUtils.scala b/kyuubi-util-scala/src/main/scala/org/apache/kyuubi/util/reflect/ReflectUtils.scala index 78b0e1df7..08916b8d1 100644 --- a/kyuubi-util-scala/src/main/scala/org/apache/kyuubi/util/reflect/ReflectUtils.scala +++ b/kyuubi-util-scala/src/main/scala/org/apache/kyuubi/util/reflect/ReflectUtils.scala @@ -93,11 +93,13 @@ object ReflectUtils { } catch { case e: Exception => val candidates = - (clz.getDeclaredMethods ++ clz.getMethods).map(_.getName).distinct.sorted - val argClassesNames = argClasses.map(_.getClass.getName) + (clz.getDeclaredMethods ++ clz.getMethods) + .map(m => s"${m.getName}(${m.getParameterTypes.map(_.getName).mkString(", ")})") + .distinct.sorted + val argClassesNames = argClasses.map(_.getName) throw new RuntimeException( - s"Method $methodName(${argClassesNames.mkString(",")})" + - s" not found in $clz [${candidates.mkString(",")}]", + s"Method $methodName(${argClassesNames.mkString(", ")})" + + s" not found in $clz [${candidates.mkString(", ")}]", e) } } diff --git a/kyuubi-util-scala/src/test/java/org/apache/kyuubi/util/reflect/ReflectUtilsSuite.scala b/kyuubi-util-scala/src/test/java/org/apache/kyuubi/util/reflect/ReflectUtilsSuite.scala index dbfd234de..d81d1d9f9 100644 --- a/kyuubi-util-scala/src/test/java/org/apache/kyuubi/util/reflect/ReflectUtilsSuite.scala +++ b/kyuubi-util-scala/src/test/java/org/apache/kyuubi/util/reflect/ReflectUtilsSuite.scala @@ -66,6 +66,18 @@ class ReflectUtilsSuite extends AnyFunSuite { assertResult("field5")(getField[String](ObjectA, "field5")) assertResult("field6")(getField[String](ObjectA, "field6")) } + + test("test invokeAs method not found exception") { + val exception = intercept[RuntimeException]{ + invokeAs[String](ObjectA, "methodNotExists", (classOf[String], "arg1"), + (classOf[String], "arg2")) + } + assert(exception.getMessage === + "Method methodNotExists(java.lang.String, java.lang.String) not found " + + "in class org.apache.kyuubi.util.reflect.ObjectA$ " + + "[equals(java.lang.Object), field5(), field6(), getClass(), hashCode(), method5(), " + + "method6(), notify(), notifyAll(), toString(), wait(), wait(long), wait(long, int)]") + } } class ClassA(val field0: String = "field0") {