15

私は、Java サービスと他のさまざまな言語で記述されたクライアントとの間で多くのリモート オブジェクト転送を行うプロジェクトに取り組んでいます。現在の制約を考慮して、既存の Java クラスに基づいてコードを生成するには何が必要かを確認することにしました。基本的に、.classファイル (またはそれらのコレクション) を取得してバイトコードを解析し、すべてのデータ メンバーとおそらくゲッター/セッターを特定し、別の言語でコードを出力して同じ構造のクラスを作成できるものを作成する必要があります。

JAD などの標準的な逆コンパイラを探しているわけではありません。.classファイルを取得して、そのデータ メンバーとメソッドのオブジェクト モデルを作成できる必要があります。これはまったく可能ですか?

4

6 に答える 6

12

私は BCEL を使用してきましたが、非常に扱いにくいと感じています。ASMの方がはるかに優れています。ビジターを非常に広範囲に使用し (少し混乱する可能性があります)、オブジェクト モデルを作成しません。オブジェクト モデルを作成しないことはボーナスです。作成したいモデルは、すべてのデータの文字通りの解釈のようには見えないからです。

于 2008-10-02T20:53:00.917 に答える
1

あなたの説明から、単純な反射で十分であるように思えます。クラスのすべての静的構造を検出できるだけでなく、特定のインスタンスのフィールドにアクセスすることもできます。

メソッドの指示を翻訳しようとしている場合にのみ、BCEL に進みます。(それがあなたが自動化しようとしているものなら、頑張ってください!)

于 2008-10-03T00:10:52.143 に答える
1

JADは、プログラムによるアクセスを許可しない Java 逆コンパイラです。これはもはや容易に入手できず、おそらく Java7 バイトコードを使用する新しいプロジェクトでは機能しないでしょう。

于 2008-10-03T03:26:58.147 に答える
1

私は過去に BCEL を使用しましたが、非常に使いやすかったです。数年前の話なので、今はもっと良いものがあるかもしれません。

アパッチ ジャカルタ BCEL

于 2008-10-02T20:22:40.943 に答える
1

ASMについてまだ誰も言及していないことにショックを受けています。これは、お金で買える最高のバイトコード ライブラリです。まあ、それは無料です。

于 2008-10-03T04:17:53.327 に答える
0

javassist も役立つと思います。

http://www.jboss.org/javassist/

私はそれを使用する必要がありませんでしたが、試してみたら、それについてのコメントを教えてください。

.class検査よりもバイトコード操作の方が多いと思いますが。

于 2008-10-02T20:35:37.947 に答える