Динамически генерировать исходники Java (без xjc) - PullRequest
7 голосов
/ 22 ноября 2010

Кому-нибудь удалось сгенерировать Java-код из файла схемы JAXB без XJC?

В некоторой степени похож на

JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler()

используется для динамической компиляции Java-кода на лету.

Примечание: Работа на JDK 6 означает, что com.sun.* пакеты инструментов устарели (спасибо Блейз Дафан за подсказку)

Ответы [ 5 ]

5 голосов
/ 23 ноября 2010

Мне пришлось включить некоторые библиотеки J2EE, чтобы мое решение работало, поскольку автономный JDK 6 не предоставляет доступа к служебным классам xjc:

import com.sun.codemodel.*;
import com.sun.tools.xjc.api.*;
import org.xml.sax.InputSource;

// Configure sources & output
String schemaPath = "path/to/schema.xsd";
String outputDirectory = "schema/output/source/";

// Setup schema compiler
SchemaCompiler sc = XJC.createSchemaCompiler();
sc.forcePackageName("com.xyz.schema.generated");

// Setup SAX InputSource
File schemaFile = new File(schemaPath);
InputSource is = new InputSource(new FileInputStream(schemaFile));
is.setSystemId(schemaFile.getAbsolutePath());

// Parse & build
sc.parseSchema(is);
S2JJAXBModel model = sc.bind();
JCodeModel jCodeModel = model.generateCode(null, null);
jCodeModel.build(new File(outputDirectory));

*. Java-источники будут помещены в outputDirectory

3 голосов
/ 05 октября 2011

Этот код генерирует файлы в определенных каталогах / структуре пакета:

import java.io.File;
import java.io.IOException;

import org.xml.sax.InputSource;

import com.sun.codemodel.JCodeModel;
import com.sun.tools.xjc.api.S2JJAXBModel;
import com.sun.tools.xjc.api.SchemaCompiler;
import com.sun.tools.xjc.api.XJC;

public class JAXCodeGen {
    public static void main(String[] args) throws IOException {

            String outputDirectory = "E:/HEAD/JAXB/src/";

            // Setup schema compiler
            SchemaCompiler sc = XJC.createSchemaCompiler();
            sc.forcePackageName("com.xyz.schema");

            // Setup SAX InputSource
            File schemaFile = new File("Item.xsd");
            InputSource is = new InputSource(schemaFile.toURI().toString());
          //  is.setSystemId(schemaFile.getAbsolutePath());

            // Parse & build
            sc.parseSchema(is);
            S2JJAXBModel model = sc.bind();
            JCodeModel jCodeModel = model.generateCode(null, null);
            jCodeModel.build(new File(outputDirectory));

    }
}
1 голос
/ 23 ноября 2010

Получить справочную реализацию JAXB здесь .

Включает класс com.sun.tools.xjc.api.XJC, который позволяет генерировать код Java.

1 голос
/ 22 ноября 2010
0 голосов
/ 08 сентября 2015

Еще один способ получения зависимостей в Maven;

    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>2.2.11</version>
    </dependency>
...