問題タブ [byte-buddy]

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.

0 投票する
1 に答える
488 参照

java - CGLib プロキシを Byte-Buddy に変換する方法

CGLib で使用しているプロキシを BB に変換しようとして苦労しています。宣言されたメソッドのインターセプトは簡単に達成できましたが、必要に応じてオブジェクトを拡張できませんでした。CGLib では、インターフェイスとインターセプターを使用します。これが私の CGLib プロキシ コードです。

これはうまくいきます。インターフェイス メソッドを使用したサブクラス化されたオブジェクトへのすべての呼び出しは、オブジェクトを拡張するプロキシ クラスに委譲されます。そのオブジェクトには、エンティティ、グラフ データベースの頂点、および状態に関連する他のオブジェクトへの参照を格納します。これを BB に実装するにはどうすればよいですか?

==================================

さて、今日、私はこれをうまく機能させましたが、そうではありませんでした。ObjectProxyFactory は、次の 2 つのクラスに分けられました。

これで、接着剤を作成する ObjectProxyFactory ができました。

このコードでは、次の例外がスローされます。

java.lang.IllegalArgumentException: net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.(ClassInjector.java:161) でクラスをブートストラップ クラス ローダーに挿入できません ...

0 投票する
1 に答える
88 参照

byte-buddy - Bytebuddy が zing で動作しない

bytebuddy は zing jvm では動作しないようです。Javaagent が開始されましたが、インターセプターがアクティブ化されていません。誰もそれをZingで動作させることができましたか?

0 投票する
1 に答える
129 参照

java - Glassfish 環境での Byte-Buddy プロキシの実装エラー

Glassfish サーバー内に BB プロキシを実装できませんでした。生成されたクラスを使用しようとすると、次のようにスローされます。

プロキシ オブジェクトを生成するメソッド クラスは次のとおりです。

完全なスタック トレースは次のとおりです

注: コードは正常に動作し、スタンドアロン jvm ですべてのテストに合格します。


Glassfish のクラスローダです。WEB-INF/lib からクラスをロードできませんでした。

0 投票する
1 に答える
537 参照

java - ByteBuddy: java.* のクラスでテストする方法

java.io (FileInputStream など) からのクラスへの呼び出しをインターセプトするエージェントの UnitTest を作成しようとしています。

私はここで与えられたヒントに従い、ByteBuddys自身のUnitTests を見てきました。

非 java.* クラスの同様のテストは正常に機能しますが、ここでは次のようになります。

SecurityManager を null に設定しようとしましたが、成功しませんでした:

私が間違っていなければ、そのようなクラスをインターセプトできるはずです。これは、カスタム ClassLoader の使用が原因である可能性があります。でも、どこを変えればいいのかわからない…

0 投票する
1 に答える
836 参照

spring - ByteBuddy @Entity アノテーションが Spring Boot ClassPathBeanDefinitionScanner basePackages スキャンに表示されない

Spring が変換された注釈を認識できるように、クラスを変換しようとしています。これにより、@Entity アノテーションを動的に注入して、Spring Boot がそれをデータ使用のためのマネージド型として登録できるようになります。

アノテーション変換は機能しますが、Spring Boot は変換されたバージョンが見つからないファイル jar レベルでパッケージ スキャンを実行しているようです。これは、JAR 自体内のクラス ファイルの入力ストリームを分析しているため、Spring がアノテーションを認識していないことを意味します。

初期のばね候補コンポーネントのスキャンは次のとおりです。

getResources 呼び出しは、最終的に PathMatchingResourcePatternResolver - doFindAllClassPathResources で終了します。

この場合、Springs クラスローダは ByteBuddy の範囲外ですか?

リソースをロードした後、Spring はクラスのメタデータをロードします (アノテーションが欠落している場合)

上記の getMetadataReader メソッド呼び出しは、最終的に

ASM ClassReader を使用して、クラスと注釈のメタデータにアクセスします。これは明らかに、Bytebuddy によって配置された @Entity アノテーションを検出しません。

Classloader を Bytebuddy にリンクするか、Springs SimpleMetadataReader をオーバーライドして、独自の実装を ByteBuddy でサポートする必要があるかどうかはわかりません。

助言がありますか?AgentBuilder を使用して注釈を変換し、Spring Boot の起動前に実行しています。

完全を期すために私のByteBuddy Impl:

Unable to instrument apache httpclient using javaagent for spring boot uber jar application をレビューしまし

実装の詳細が必要な場合はお知らせください。スプリング コンポーネント アノテーションを使用してクラスを計測できるように、bytebuddy とスプリングをきれいに統合したいと考えています。

0 投票する
1 に答える
554 参照

java - ByteBuddy サブクラス コンストラクター

bytebuddy で抽象クラスのサブクラスを作成しようとしており、独自の関数でコンストラクターをオーバーライドしたいと考えています。defineConstructor で動作させることはできません。

スーパークラス:

サブクラス:

私のバイトバディ:

エラー:

0 投票する
1 に答える
764 参照

java - Byte Buddy で変身後、クラスの読み込みや保存をせずにクラス情報を取得する方法は?

package privateclass のデフォルト コンストラクターなどの既存のプライベート メソッドについては、ContentItem以下のコードを使用してメソッドを保護するように設定しました。

以下のコードとByte BuddyのテストケースAbstractDynamicTypeBuilderForInliningTest.java::testMethodTransformationExistingMethod()をテストすることにより、ファイルにロードdynamicTypeまたは保存すると、ロードされたクラスと保存されたクラスのデフォルトのコンストラクターは になりましprotectedたが、コンストラクターdynamicType.getTypeDescription().getDeclaredMethods()は元の修飾子 ig 0 (パッケージプライベート) を保持していることがわかりました.

問題は、変換されたクラス情報をロードまたは保存せずに取得するにはどうすればよいかということです。変換されたクラス情報を使用して、クラスのサブクラスにデフォルト コンストラクターを追加するContentItem必要があります (サブクラスのデフォルト コンストラクターは、のデフォルト コンストラクターを呼び出す必要がありContentItemます)。

0 投票する
1 に答える
1792 参照

mockito - OSGI の Mockito 2 での ClassNotFoundException

Mockito 2 (バージョン 2.0.54 ベータ版) を使用して Eclipse で junit プラグイン テストを実行しようとすると、呼び出し org.mockito.Mockito.mock(Class<T>, MockSettings) が上記のスタック トレースで失敗します。

これを行うことで問題を回避できます

それは正しくないようです.mockito 1からmockito 2に移行するには多くの作業が必要です.osgi環境でmockitoを使用できる他の方法はありますか?