問題タブ [javassist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
analysis - バイトコードからコードのオペランドの名前を取得する
クラスのバイトコードを分析しています。オペコードとそのオペランドを検出できます。これの名前(オブジェクトの名前)を取得するにはどうすればよいですか
たとえば、オペコードは新しく、オペランドとして整数を持っています (次のコードを考えてください: "new String()") 名前をどこで検索すればよいですか? クラスのconstantPoolでどうやって?私は専門家ではありません
java - 実行時にクラスを生成するために選択するライブラリ
特にクラスの状態に加えられた変更を検出するために、実行時にクラスを拡張する必要があります。可能であれば、フィールドの割り当てをインターセプトすることで変更を検出できるようにしたいと考えています。そうでない場合は、セッターをインターセプトしても問題ありません。どのライブラリを使用する必要があり、その理由は? javassist または cglib または ? これは java.lang.reflect.Proxy で可能ですか? これらのライブラリを比較できますか? ありがとう。
java - Javassist : 動的に生成されたクラスでデフォルト以外のコンストラクターを呼び出すにはどうすればよいですか?
私はこの問題に多くの時間を費やしましたが、役に立ちませんでした。理想的には、動的に生成されたクラスのコンストラクターにパラメーターを渡したいと思います。問題は、パラメーター化されたコンストラクターでインスタンス化する方法がわからないことです。
これまでのインスタンス化への私のアプローチは...
柔軟性を高めるためにこれを行うためのより良い方法はありますか?
どうもありがとう!
RB
java - Javassist: 動的に生成されたクラスを特定のパッケージに追加するにはどうすればよいですか?
他の既存のクラスから保護されたフィールドにアクセスする必要があるクラスを生成しています。このため、最終的なクラスパスを指定する必要があります。
Javassistでこれを行う方法を知っている人はいますか?
java - CtClass.toClass がメッセージ「null」で例外をスローする
動的クラスを作成するために実行する手順は次のとおりです。
最初に、クラスが既に存在するかどうかを確認しようとします。そうでClassPool
ない場合は、クラスの作成に進みます。デフロストは、フェールセーフ メカニズムのためだけに行われます。toClass
メソッドが呼び出されたときに例外が発生しますdynamicClass.toClass();
例外は次のとおりです
上記の例外の理由は何ですか?それを回避するにはどうすればよいですか?
java - Javaクラスは実行時にそれ自体にメソッドを追加できますか?
クラスは実行時に(ブロックからのように)メソッドをそれ自体に追加できますstatic
。これにより、誰かがこのクラスでリフレクションを実行している場合、コンパイル時に定義されていなくても、新しいメソッドが表示されますか?
バックグラウンド:
私が使用しているフレームワークは、慣例により、メソッドAction
を持つクラスが定義されることを期待しています。doAction(...)
フレームワークは、実行時にこれらのクラスを検査して、doAction()
メソッドで使用可能なパラメーターのタイプを確認します。例:doAction(String a、Integer b)
doAction()
各クラスが、検査時にジャストインタイムで、さまざまなパラメーターを使用してプログラムでメソッドを生成できるようにしたいと思います。メソッドの本体は空にすることができます。
java - Javassist を利用して戻り値の型に基づいてオーバーロードを提供する
Javassist を使用して関数呼び出しの戻り値の型を動的に変更しましたが、機能しません。
ソースコードで次のように定義されている呼び出しがあります。
しかし、実行時に動的に次のように変更します。
私はそれを次のように呼びます:
MethodNotFound 例外を取得します。リフレクションを使用すると、オブジェクトに新しいメソッドが表示されますが、古い戻り値の型に何らかの形でバインドされているため、呼び出しが失敗しているようです。
新しいメソッドを反射的に呼び出す場合 (わずかな擬似コード..):
その後、すべて正常に動作し、操作されたバイトコードと操作されていないバイトコードを問題なく切り替えることができ、それに応じて O の型が String または Boolean のいずれかであることがわかります。
理由はありますか?
java - Java Assist 初心者の質問
その場でいくつかのクラスを生成しようとしていますが、以下は私の最初の試みです:
しかし、クラスローダーの問題に直面しています:
スレッド「メイン」の例外 java.lang.IllegalArgumentException: sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) で java.lang.String フィールド Entity.name を java.lang.String に設定できません。 UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) の sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) の sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57) の java.lang.reflect.Field.set (Field.java:657) Main.test(Main.java:26) で
どうすればこれを解決できますか?
java - メソッドのパラメーター注釈を保持する動的プロキシを Java で作成するにはどうすればよいですか?
現在、Hibernate Validator のメソッド検証サポートを使用できるようにするために、いくつかの既存の JAX/RS リソースをプロキシしようとしています。ただし、クラス (現在は cglib 2.2 を使用) をプロキシすると、プロキシ クラスのパラメーターに FormParam 注釈が存在しないため、JAX/RS ランタイム (apache wink) はパラメーターを設定しません。これを示すテストコードを次に示します。
これにより、次の出力が得られます。
他の選択肢はありますか?
java - Javassistを使用した予期しないNullPointerException
次のコードを実行します。
そして、このNPEが発生します: