Подтвердить что ты не робот

Программно проверить файлы .class

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Apache Jakarta BCEL

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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