Сгенерировать код Java в Eclipse?

Кто-либо знает то, что приближается, можно взять для автоматической генерации исходного кода Java, от, например, xml или json файла, в затмении?

Один яркий пример того, что я думаю о выполнении, - то, что делает Google Android sdk: им генерировали класс R автоматически от ресурсов.

Каждый раз, когда файл ресурсов сохраняется в Eclipse R, класс автоматически повторно создан.

ОБНОВЛЕНИЕ: Пример: В тексте (xml или json файл) у меня есть следующее:

 
     
         The first alpha tag.
         231232
     
     
         This is the beta tag.
         231232
     

Затем в моем сгенерированном классе Java, скажите R, как который у меня было бы что-то:

R.tags.ids.ALPHA //refers to an enum value for example
R.tags.values.ALPHA //refers to final int with avlue 231232
R.tags.descriptions.ALPHA //refers to the String with description

Спасибо!

15
задан Andriy Drozdyuk 3 June 2010 в 17:06
поделиться

7 ответов

Я добавляю еще один ответ на основе ваших комментариев, а также потому, что я действительно не рекомендую делать это за пределами Google Android Resource SDK. Google в основном использует иерархию статических классов (синглтонов) для своих ресурсов. Вам нужно заставить ваш XSLT генерировать статические переменные-члены вместо методов получения и установки.

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

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/" priority="100">
    public class <xsl:value-of select="name(node())" /> {
        <xsl:apply-templates  select="child::node()" />
    }
    </xsl:template>
    <xsl:template match="/*/*">
        public static String <xsl:value-of select="name()" />;
        public static String get<xsl:value-of select="name()" /> {
            return <xsl:value-of select=" name()" />;
        }

        public void static set<xsl:value-of select="name()" />(String value) {
            <xsl:value-of select="name()" /> = value;
        }
    </xsl:template>
</xsl:stylesheet>

Если вы обработаете с помощью этого примера XML:

<?xml version="1.0" encoding="UTF-8"?>
<Human>
    <EyeColor>brown</EyeColor>
    <HairColor>brown</HairColor>
</Human>

Вы получите что-то вроде: открытый класс Человек {

    public static String EyeColor;

    public static String getEyeColor {
        return EyeColor;
    }

    public static void setEyeColor(String value) {
        this.EyeColor = value;
    }


    public static String HairColor;
    public static String getHairColor {
        return HairColor;
    }

    public static void setHairColor(String value) {
        this.HairColor = value;
    }


}
3
ответ дан 1 December 2019 в 04:46
поделиться

Взгляните на XDoclet . Это расширяемый механизм генерации открытого исходного кода для Java.

РЕДАКТИРОВАТЬ: Как указывает Божо, XDoclet в основном заменен аннотациями: Аннотации против XDoclet

Используют ли какие-либо библиотеки Java аннотации для генерации кода?

1
ответ дан 1 December 2019 в 04:46
поделиться
1
ответ дан 1 December 2019 в 04:46
поделиться

Well Eclipse Modeling Framework (EMF) предназначена для приложения, которое вы с нетерпением ждете. Я предполагаю, что у вас есть модель, и вы хотите преобразовать ее в код. Я могу дать очень конкретный совет: JET (шаблон Java Emitter), вы можете найти здесь более подробную информацию.

Также более новый фреймворк XP и представленный eclipse,

Вращаются вокруг абстрактных компонентов разработки синтаксиса, технологии преобразования модели. Технологии. 1. преобразование модели в текст (шаблоны эмиттера Java [JET] и Xpand) 2. Модель-модель (QVT и ATL)

Здесь модель относится к модели XML-XSLT / UML (Rational rose).

2
ответ дан 1 December 2019 в 04:46
поделиться

От XML к JAVA и наоборот Я очень рекомендую JAXB.

Вы можете генерировать исходный код Java из схем, используя JAXB 2.0 или выше. Или вы можете генерировать схемы из Java.

Вы также можете легко заставить JAXB генерировать/потреблять JSON с помощью Jettison.

Вы также можете заставить JAXB генерировать POJO в стиле Martin Fowler Fluent Style или множеством различных способов, используя его систему плагинов.

EDIT на основе ваших комментариев: Пусть XSLT сгенерирует ваш JAXB POJO:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/" priority="100">
    import javax.xml.bind.annotation.XmlRootElement;

    @XmlRootElement(name="Human")
    public class <xsl:value-of select="name(node())" /> {
        <xsl:apply-templates  select="child::node()" />
    }
    </xsl:template>
    <xsl:template match="/*/*">
        private String <xsl:value-of select="name()" />;
        public String get<xsl:value-of select="name()" /> {
            return <xsl:value-of select=" name()" />;
        }

        public void set<xsl:value-of select="name()" />(String value) {
            this.<xsl:value-of select="name()" /> = value;
        }
    </xsl:template>
</xsl:stylesheet>

Если вы обработаете этот пример XML:

<?xml version="1.0" encoding="UTF-8"?>
<Human>
    <EyeColor>brown</EyeColor>
    <HairColor>brown</HairColor>
</Human>

Вы получите что-то вроде:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Human")
public class Human {


    private String EyeColor;
    public String getEyeColor {
        return EyeColor;
    }

    public void setEyeColor(String value) {
        this.EyeColor = value;
    }


    private String HairColor;
    public String getHairColor {
        return HairColor;
    }

    public void setHairColor(String value) {
        this.HairColor = value;
    }


}
1
ответ дан 1 December 2019 в 04:46
поделиться

Я делаю это так, что у меня есть XSLT-файл, который просто преобразует мои xml-данные (в моем случае спецификацию протокола) в исходный код Java. Это XSLT-преобразование может быть легко выполнено в ANT-задаче, которая может быть включена в цепочку сборки в eclipse.

Возможно, есть плагин для этой конкретной задачи.

Некоторые полезные ссылки:

4
ответ дан 1 December 2019 в 04:46
поделиться

Да, вы можете сделать это с помощью файла xml. Создайте свой собственный шаблон файла xml, а затем с помощью команды "Preferences-java-code template-import" выберите этот файл, и вы сможете использовать этот шаблон.

0
ответ дан 1 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: