Hi all,
I try access a method located in a controller using the reflection API.
I have this Controller :
class HomeController @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport {
def home = JeAction.async { implicit request =>
Future(Ok("It works"))
}
}
I try to access my home method using the reflection API :
val runtime: JavaUniverse = scala.reflect.runtime.universe
val mirror: runtime.Mirror = runtime.runtimeMirror(this.getClass.getClassLoader)
val controller: Class[_] = mirror.runtimeClass(mirror.staticClass("controllers.HomeController"))
val instanceMirror = mirror.reflect(controller)
val controllerInstance: Any = instanceMirror.instance
val method: runtime.MethodSymbol = mirror.typeOf[HomeController].decl(runtime.TermName("home")).asMethod
val action: Action[AnyContent] = instanceMirror.reflectMethod(method).apply().asInstanceOf[Action[AnyContent]]
Last line generate the follow Exception :
scala.ScalaReflectionException: expected a member of class Class, you provided method controllers.HomeController.home
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$abort(JavaMirrors.scala:115) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$ErrorNotMember(JavaMirrors.scala:121) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf$1.apply(JavaMirrors.scala:214) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror.ensuringNotFree(JavaMirrors.scala:204) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf(JavaMirrors.scala:213) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectMethod(JavaMirrors.scala:247) ~[scala-reflect-2.11.6.jar:na]
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectMethod(JavaMirrors.scala:233) ~[scala-reflect-2.11.6.jar:na]
Can someone help me fixinh this?
Francis