From 8ce6ac3e3e5e0c066e2db25d07a97bb21c26afd0 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 13 Jun 2012 12:23:02 +0200 Subject: [PATCH] #2217 - setting accessible = true before newInstance --- .../test/java/akka/actor/NonPublicClass.java | 22 +++++++++++++++++++ .../test/scala/akka/actor/ActorRefSpec.scala | 7 ++++++ .../src/main/scala/akka/actor/Props.scala | 6 ++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java diff --git a/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java b/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java new file mode 100644 index 0000000000..55f3910db7 --- /dev/null +++ b/akka-actor-tests/src/test/java/akka/actor/NonPublicClass.java @@ -0,0 +1,22 @@ +package akka.actor; + +import com.sun.xml.internal.ws.api.PropertySet; + +/** + * Created by IntelliJ IDEA. + * User: viktorklang + * Date: 6/13/12 + * Time: 12:12 PM + * To change this template use File | Settings | File Templates. + */ +public class NonPublicClass { + public static Props createProps() { + return new Props(MyNonPublicActorClass.class); + } +} + +class MyNonPublicActorClass extends UntypedActor { + @Override public void onReceive(Object msg) { + getSender().tell(msg); + } +} \ No newline at end of file diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala index bec066d97a..3056dc9e95 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala @@ -358,6 +358,13 @@ class ActorRefSpec extends AkkaSpec with DefaultTimeout { system.stop(serverRef) } + "support actorOfs where the class of the actor isn't public" in { + val a = system.actorOf(NonPublicClass.createProps()) + a.tell("pigdog", testActor) + expectMsg("pigdog") + system stop a + } + "stop when sent a poison pill" in { val timeout = Timeout(20000) val ref = system.actorOf(Props(new Actor { diff --git a/akka-actor/src/main/scala/akka/actor/Props.scala b/akka-actor/src/main/scala/akka/actor/Props.scala index fc01a5ba36..91c4ced285 100644 --- a/akka-actor/src/main/scala/akka/actor/Props.scala +++ b/akka-actor/src/main/scala/akka/actor/Props.scala @@ -186,5 +186,9 @@ case class Props( * able to optimize serialization. */ private[akka] case class FromClassCreator(clazz: Class[_ <: Actor]) extends Function0[Actor] { - def apply(): Actor = clazz.newInstance + def apply(): Actor = { + val ctor = clazz.getDeclaredConstructor() + ctor.setAccessible(true) + ctor.newInstance() + } }