Javassistがスーパークラスで定義されたメソッドを呼び出さない

JayD

みなさん、こんにちは。javassistライブラリで手を試していて、乗り越えられないハードルに出くわしたようです。問題は、ジャージのResourceConfigクラスを拡張する構成クラスを動的に作成したいことと、コンストラクターでパッケージとファクトリオブジェクトをインジェクション用に登録したいことです。しかし、エラーが発生するたびに(以下に投稿)

public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        ClassPool pool = ClassPool.getDefault();

        CtClass superCc = null;
        try {
            superCc = pool.get(ResourceConfig.class.getCanonicalName());

        } catch (NotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            CtClass cc = pool.makeClass("org.demonking.AppConfig");
            cc.setSuperclass(superCc);
            System.out.println(cc.getSuperclass().getName());
            CtConstructor constructor = new CtConstructor(new CtClass[0], cc);

            constructor.setBody("{\n"+"packages(\"org.demonking\");"+"\n"+"register(InjectorDemo.class);"+"\n"+"}");


            cc.addConstructor(constructor);

        } catch (CannotCompileException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
//rest of my jersey code
}

元のAppConfig(正常に動作します)動的に作成したい

public class AppConfig extends ResourceConfig{

    public AppConfig()
    {
        packages("org.demonking");
        register(new AbstractBinder(){
            @Override
            protected void configure() {
                bindFactory(ContextHelperFactory.class)
                        .to(ContextHelper.class)
                        .in(RequestScoped.class);
            } 
        });
    }

調査中に、javassistには匿名の内部クラスに関していくつかの制限があるため、コードがInjectorDemoクラスにシフトされていることに気づきました。

public class InjectorDemo extends AbstractBinder {

    @Override
    protected void configure() {
        // TODO Auto-generated method stub
             bindFactory(ContextHelperFactory.class)
                     .to(ContextHelper.class)
                     .in(RequestScoped.class);
    }
}

エラー

javassist.CannotCompileException: [source error] packages(java.lang.String) not found in org.demonking.AppConfig
    at javassist.CtBehavior.setBody(CtBehavior.java:446)
    at javassist.CtBehavior.setBody(CtBehavior.java:412)
    at javassist.CtConstructor.setBody(CtConstructor.java:217)
    at org.logicunit.JavassistDemoMain.main(JavassistDemoMain.java:42)
Caused by: compile error: packages(java.lang.String) not found in org.demonking.AppConfig
    at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:749)
    at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:695)
    at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
    at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
    at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:330)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
    at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:292)
    at javassist.compiler.Javac.compileBody(Javac.java:223)
    at javassist.CtBehavior.setBody(CtBehavior.java:438)
JayD

私はそれを機能させました。同じ問題を抱えている人にとっての解決策は、適切なパラメータを使用してメソッドを適切に呼び出すことでした。私の場合、varargsを使用してメソッドを呼び出す方法を見つけたら、文字列を渡すときにvarargs引数を除いpackagesメソッドを使用しました。 javassistを介した引数私はコードを機能させました。これが私のためにトリックをしたスレッドですhttps://issues.jboss.org/browse/JASSIST-192?_sscc=t

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javascript ES6:スーパークラスで定義された静的メソッドから呼び出しサブクラスを取得する方法

分類Dev

クラスで定義されたメソッドを呼び出すことができません

分類Dev

スーパークラスで宣言された静的メソッドがサブクラスで呼び出されたときに、サブクラスの静的初期化子が呼び出されないのはなぜですか?

分類Dev

クラス内のクラス外で定義されたpythonメソッドを呼び出す

分類Dev

エラークラスパス・リソースに定義された名前「のEntityManagerFactory」でBeanを作成(INITメソッドの呼び出しが失敗しました)

分類Dev

OOP PHP —クラスのコンストラクターで定義された特定のメソッドを選択的に呼び出す方法は?

分類Dev

Pythonクラスでメソッドを設定すると、呼び出されたときにselfが渡されないのはなぜですか?

分類Dev

Javaの別のパッケージの継承クラスから保護されたメソッドを呼び出せないのはなぜですか?

分類Dev

JavaScript:メソッドから呼び出されたときにクラスプロパティが定義されていません

分類Dev

スーパークラスのオーバーライドされたメソッドをいつ、どこで呼び出すかを知る方法

分類Dev

サブクラスで定義されているメソッドを呼び出せません

分類Dev

Java:サブクラスからスーパークラスの保護されたメソッドを呼び出す-見えない?

分類Dev

メソッドがスーパークラスで定義されている場合、それを呼び出すオブジェクトに応じて結果を変更する方法

分類Dev

スーパークラスメソッドが呼び出されたときにテストする方法

分類Dev

リンクリストクラスが別のクラスメソッドから呼び出されたときにノードを挿入しない

分類Dev

AngularJSで定義されたサービスメソッドを呼び出す方法は?

分類Dev

Javaラッパー:スーパーコンストラクターで呼び出されたメソッドをオーバーライドします

分類Dev

NameError:クラス内のメソッドを呼び出すときにグローバル名が定義されていません

分類Dev

別のクラスで静的メソッドを呼び出した後、ロガーのSystem.setPropertyが変更されていない

分類Dev

オーバーロードされたクラスメソッドのあいまいな呼び出し

分類Dev

Scala:どの暗黙のパラメーターが優先されますか?メソッドが定義されている場所で宣言されたもの?または、メソッドが呼び出される場所はどこですか?

分類Dev

スーパークラスの__init__メソッドが自動的に呼び出されないのはなぜですか?

分類Dev

定義されたサービスメソッドは呼び出されず、代わりに実際のサービスが呼び出されます

分類Dev

Pythonパッチ:クラスでネストされたメソッドを呼び出すことが機能しない

分類Dev

プロパティが設定されているときにベースクラスからメソッドを呼び出す

分類Dev

NSobjectクラスで宣言および定義されているビューコントローラクラスにpermeterizedメソッドが表示されない

分類Dev

子クラスのデリゲートメソッドがSwift 5コンパイラーで呼び出されないことがある

分類Dev

サブクラスのメソッドを呼び出すために使用されるスーパークラス参照を決定します

分類Dev

salesforce apexクラスでパラメータ化されたメソッドを呼び出すにはどうすればよいですか

Related 関連記事

  1. 1

    Javascript ES6:スーパークラスで定義された静的メソッドから呼び出しサブクラスを取得する方法

  2. 2

    クラスで定義されたメソッドを呼び出すことができません

  3. 3

    スーパークラスで宣言された静的メソッドがサブクラスで呼び出されたときに、サブクラスの静的初期化子が呼び出されないのはなぜですか?

  4. 4

    クラス内のクラス外で定義されたpythonメソッドを呼び出す

  5. 5

    エラークラスパス・リソースに定義された名前「のEntityManagerFactory」でBeanを作成(INITメソッドの呼び出しが失敗しました)

  6. 6

    OOP PHP —クラスのコンストラクターで定義された特定のメソッドを選択的に呼び出す方法は?

  7. 7

    Pythonクラスでメソッドを設定すると、呼び出されたときにselfが渡されないのはなぜですか?

  8. 8

    Javaの別のパッケージの継承クラスから保護されたメソッドを呼び出せないのはなぜですか?

  9. 9

    JavaScript:メソッドから呼び出されたときにクラスプロパティが定義されていません

  10. 10

    スーパークラスのオーバーライドされたメソッドをいつ、どこで呼び出すかを知る方法

  11. 11

    サブクラスで定義されているメソッドを呼び出せません

  12. 12

    Java:サブクラスからスーパークラスの保護されたメソッドを呼び出す-見えない?

  13. 13

    メソッドがスーパークラスで定義されている場合、それを呼び出すオブジェクトに応じて結果を変更する方法

  14. 14

    スーパークラスメソッドが呼び出されたときにテストする方法

  15. 15

    リンクリストクラスが別のクラスメソッドから呼び出されたときにノードを挿入しない

  16. 16

    AngularJSで定義されたサービスメソッドを呼び出す方法は?

  17. 17

    Javaラッパー:スーパーコンストラクターで呼び出されたメソッドをオーバーライドします

  18. 18

    NameError:クラス内のメソッドを呼び出すときにグローバル名が定義されていません

  19. 19

    別のクラスで静的メソッドを呼び出した後、ロガーのSystem.setPropertyが変更されていない

  20. 20

    オーバーロードされたクラスメソッドのあいまいな呼び出し

  21. 21

    Scala:どの暗黙のパラメーターが優先されますか?メソッドが定義されている場所で宣言されたもの?または、メソッドが呼び出される場所はどこですか?

  22. 22

    スーパークラスの__init__メソッドが自動的に呼び出されないのはなぜですか?

  23. 23

    定義されたサービスメソッドは呼び出されず、代わりに実際のサービスが呼び出されます

  24. 24

    Pythonパッチ:クラスでネストされたメソッドを呼び出すことが機能しない

  25. 25

    プロパティが設定されているときにベースクラスからメソッドを呼び出す

  26. 26

    NSobjectクラスで宣言および定義されているビューコントローラクラスにpermeterizedメソッドが表示されない

  27. 27

    子クラスのデリゲートメソッドがSwift 5コンパイラーで呼び出されないことがある

  28. 28

    サブクラスのメソッドを呼び出すために使用されるスーパークラス参照を決定します

  29. 29

    salesforce apexクラスでパラメータ化されたメソッドを呼び出すにはどうすればよいですか

ホットタグ

アーカイブ