Создать код Java в Eclipse? - PullRequest
15 голосов
/ 02 июня 2010

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

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

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

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

 <tags>
     <tag id="ALPHA">
         <description>The first alpha tag.</description>
         <value>231232</value>
     </tag>
     <tag id="BETA">
         <description>This is the beta tag.</description>
         <value>231232</value>
     </tag>

Тогда в моем сгенерированном классе 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

Спасибо!

Ответы [ 7 ]

4 голосов
/ 02 июня 2010

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

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

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

3 голосов
/ 05 июня 2010

Я добавляю еще один ответ, основываясь на ваших комментариях, а также потому, что я действительно не рекомендую делать это вне 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>

Вы получаете что-то вроде: открытый класс 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;
    }


}
2 голосов
/ 04 июня 2010

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

Кроме того, более новая среда XPand, представленная eclipse,

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

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

1 голос
/ 03 июня 2010
1 голос
/ 03 июня 2010

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

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

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

Вы также можете заставить JAXB генерировать POJO в свободном стиле Мартина Фаулера или целым рядом разных способов, используя его систему плагинов.

РЕДАКТИРОВАТЬ на основе ваших комментариев: Пусть 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 голос
/ 02 июня 2010

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

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

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

0 голосов
/ 06 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...