Вопрос

Я работаю над проектом, в котором мы выполняем много удаленной передачи объектов между службой Java и клиентами, написанными на других языках. Учитывая наши текущие ограничения, я решил посмотреть, что потребуется для генерации кода на основе существующего класса Java. По сути, мне нужно взять файл .class (или его коллекцию), проанализировать байт-код, чтобы определить все члены данных и, возможно, получатели / установщики, а затем написать что-то, что может выводить код на другом языке. создать класс с такой же структурой.

Я не ищу стандартные декомпиляторы, такие как JAD. Мне нужно иметь возможность взять файл .class и создать объектную модель его членов данных и методов. Возможно ли это вообще?

Это было полезно?

Решение

Я использовал BCEL и считаю его довольно неловким. ASM намного лучше. Он очень широко использует посетителей (что может немного смущать) и не создает объектную модель. Не создание объектной модели оказывается бонусом, поскольку любая модель, которую вы хотите создать, вряд ли будет выглядеть буквально как интерпретация всех данных.

Другие советы

Я использовал BCEL в прошлом, и его было довольно просто использовать. Это было несколько лет назад, поэтому сейчас может быть что-то лучше.

Apache Jakarta BCEL

По вашему описанию это звучит как простого отражения будет достаточно. Вы можете обнаружить всю статическую структуру класса, а также получить доступ к полям конкретного экземпляра.

Я бы перешел к BCEL, только если вы пытаетесь перевести инструкции метода. (И если это то, что вы пытаетесь автоматизировать, удачи!)

Я шокирован тем, что никто еще не упомянул ASM . Это лучшая библиотека байт-кодов, которую можно купить за ваши деньги. Ну, хорошо, это бесплатно.

JAD - это декомпилятор Java, который не разрешает программный доступ. Он больше недоступен и, вероятно, не будет работать для новых проектов с байт-кодами Java7.

Я думаю, что javassist может вам тоже помочь.

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

У меня никогда не было необходимости его использовать, но если вы попробуете, дайте нам знать ваши комментарии об этом?

Хотя я думаю, что это больше для манипулирования байт-кодом, чем для проверки .class.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top