Merge pull request #539 from akka/wip-2217-create-nonpublic-class-√
#2217 - setting accessible = true before newInstance
This commit is contained in:
commit
74e69c4ebd
3 changed files with 30 additions and 1 deletions
|
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
package akka.actor;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -358,6 +358,13 @@ class ActorRefSpec extends AkkaSpec with DefaultTimeout {
|
||||||
system.stop(serverRef)
|
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 {
|
"stop when sent a poison pill" in {
|
||||||
val timeout = Timeout(20000)
|
val timeout = Timeout(20000)
|
||||||
val ref = system.actorOf(Props(new Actor {
|
val ref = system.actorOf(Props(new Actor {
|
||||||
|
|
|
||||||
|
|
@ -185,5 +185,10 @@ case class Props(
|
||||||
* able to optimize serialization.
|
* able to optimize serialization.
|
||||||
*/
|
*/
|
||||||
private[akka] case class FromClassCreator(clazz: Class[_ <: Actor]) extends Function0[Actor] {
|
private[akka] case class FromClassCreator(clazz: Class[_ <: Actor]) extends Function0[Actor] {
|
||||||
def apply(): Actor = clazz.newInstance
|
def apply(): Actor = try clazz.newInstance catch {
|
||||||
|
case iae: IllegalAccessException ⇒
|
||||||
|
val ctor = clazz.getDeclaredConstructor()
|
||||||
|
ctor.setAccessible(true)
|
||||||
|
ctor.newInstance()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue