1

invoke() メソッドを使用して gosu スクラッチパッドからプライベート メソッドを呼び出そうとしていますが、そのプライベート メソッドにアクセスできません。GOSU言語でプライベートメソッドを呼び出す最良の方法を教えてください。コードは次のとおりです

try{
    var clazz = java.lang.Class.forName(ClaimSearchCriteriaImpl)
    var method = clazz.getDeclaredMethod("generateSimpleActiveClaimViewQuery", null)
       method.setAccessible(true)
    var ss =   method.invoke(clazz, null)as ClaimSearchCriteriaImpl
       print("Result.."+ss)
} catch(exception){
        print("***********"+exception)
}

このコードを実行しようとすると、次の例外が発生します

java.lang.IllegalAccessException: Class program_.__Program__505 can not access a member of class com.guidewire.cc.domain.claim.impl.ClaimSearchCriteriaImpl with modifiers "private"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:105)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261)
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at program_.__Program__505.evaluate(Unknown Source)
    at gw.internal.gosu.parser.GosuProgram.runProgram(GosuProgram.java:421)
    at gw.internal.gosu.parser.GosuProgram.evaluate(GosuProgram.java:253)
    at gw.internal.gosu.parser.GosuProgram_Proxy.evaluate(gw.internal.gosu.parser.GosuProgram_Proxy:2)
    at gw.internal.gosu.parser.ExecutionEnvironment$1.evaluate(ExecutionEnvironment.java:543)
    at gw.internal.gosu.parser.ExecutionEnvironment$1.runScript(ExecutionEnvironment.java:523)
    at gw.internal.gosu.parser.ExecutionEnvironment$1.run(ExecutionEnvironment.java:489)
    at java.lang.Thread.run(Thread.java:724)
4

2 に答える 2

0

@Shivanandam Sirmarigari による解決策は現在実際に機能していますが、いくつかの問題があります。

1 つ目は、既に述べたように、Method.invoke のドキュメントから、実行する on オブジェクトのインスタンスが必要です。

/** @param obj 基礎となるメソッドが呼び出されるオブジェクト */

public Object invoke(Object obj, Object... args)

2番目のClaimSearchCriteriaImplには実際にはデフォルトのコンストラクターがないため、次のようなものを使用する必要があります

var obj = clazz.getDeclaredConstructor({ConstructorArgType}).newInstance({argTypeObj})

3番目に、argTypeObj (おそらく obj 自体) は、実際にはトランザクションを作成する必要がある場合があります。

于 2018-06-20T09:44:17.373 に答える