Преобразуйте файл Java (из JCodeModel) в класс Java по коду (вместо Java c и т. Д.)

У меня есть следующий код, который использует файл XSD для создания файла Java. Теперь мне нужно преобразовать файл Java (из JCodeModel) в класс Java, который я могу создать / использовать в своем проекте. К сожалению, он создается во время выполнения, поэтому я не могу добавить его в проект. Важно, что решение основано на коде. Итак, как мне преобразовать файл Java в класс Java по коду (вместо использования Javac и т. Д.)?

public static void xsdStructure() throws Exception
{
    String directory = "D:/PROJEKTE/";

    SchemaCompiler sc = XJC.createSchemaCompiler();
    sc.forcePackageName("de.monster.jaxb");

    File myXsd = new File("sql.xsd");
    InputSource source = new InputSource(myXsd.toURI().toString());

    sc.parseSchema(source);
    S2JJAXBModel model = sc.bind();
    JCodeModel jCodeModel = model.generateCode(null, null);
    jCodeModel.build(new File(directory));
}

Файл, созданный с jCodeModel.build(new File(directory)); выглядит так:

public class QUERY {

@XmlElement(name = "SELECT", required = true)
protected QUERY.SELECT select;
@XmlElement(name = "TABLE")
protected List<QUERY.TABLE> table;
@XmlElement(name = "JOIN")
protected List<QUERY.JOIN> join;
@XmlElement(name = "WHERE", required = true)
protected String where;
@XmlElement(name = "GROUP", required = true)
protected QUERY.GROUP group;
@XmlElement(name = "ORDER", required = true)
protected QUERY.ORDER order;
@XmlAttribute(name = "author")
protected String author;

public QUERY.SELECT getSELECT() {
    return select;
}

public void setSELECT(QUERY.SELECT value) {
    this.select = value;
}

public List<QUERY.TABLE> getTABLE() {
    if (table == null) {
        table = new ArrayList<QUERY.TABLE>();
    }
    return this.table;
}

public List<QUERY.JOIN> getJOIN() {
    if (join == null) {
        join = new ArrayList<QUERY.JOIN>();
    }
    return this.join;
}

public String getWHERE() {
    return where;
}

public void setWHERE(String value) {
    this.where = value;
}

public QUERY.GROUP getGROUP() {
    return group;
}

public void setGROUP(QUERY.GROUP value) {
    this.group = value;
}

public QUERY.ORDER getORDER() {
    return order;
}

public void setORDER(QUERY.ORDER value) {
    this.order = value;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String value) {
    this.author = value;
}

...

1 ответ

Решение

StandardJavaFileManager

Каждый компилятор, который реализует этот интерфейс, предоставляет стандартный файловый менеджер для работы с обычными файлами. Интерфейс StandardJavaFileManager определяет дополнительные методы для создания файловых объектов из обычных файлов.

http://docs.oracle.com/javase/8/docs/api/javax/tools/JavaCompiler.html

Другие вопросы по тегам