java - 从java代码运行xjc

标签 java jaxb operating-system xjc

我正在使用 xjc 从 xsd 生成类。生成必须发生在 java 代码内部。现在我是这样做的:

Process child = Runtime.getRuntime().exec(command);
        try {
            System.out.println("waiting...");
            child.waitFor();
            System.out.println("waiting ended..");
        } catch (InterruptedException e) {
            e.printStackTrace();
            return false;
        }

上述程序的输出是:

waiting...

我必须在生成类后使用它们。这里的问题是子进程永远不会退出,控制权永远不会回到java程序!
有没有办法在没有 getRuntime().exec() 的情况下执行此操作?

最佳答案

您实际上可以在命令行工具后面使用驱动程序类(com.sun.tools.xjc.Driver)。这对我有用:

import com.sun.tools.xjc.BadCommandLineException;
import com.sun.tools.xjc.Driver;
import com.sun.tools.xjc.XJCListener;
import org.xml.sax.SAXParseException;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Generator {

    public static void main(String[] args) throws BadCommandLineException, IOException {
        final String targetDir = "jaxb-files";
        Path path = Paths.get(targetDir);
        if(!Files.exists(path)) {
            Files.createDirectories(path);
        }
        Driver.run(new String[]{"-d", targetDir,
                "D:\\dev\\onepoint\\tui\\java\\xsdjsonschema\\src\\main\\xsd\\test.xsd"}, new XJCListener() {

            @Override
            public void error(SAXParseException e) {
                printError(e, "ERROR");
            }

            @Override
            public void fatalError(SAXParseException e) {
                printError(e, "FATAL");
            }

            @Override
            public void warning(SAXParseException e) {
                printError(e, "WARN");
            }

            @Override
            public void info(SAXParseException e) {
                printError(e, "INFO");
            }

            private void printError(SAXParseException e, String level) {
                System.err.printf("%s: SAX Parse exception", level);
                e.printStackTrace();
            }
        });
    }
}

关于java - 从java代码运行xjc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17312199/

相关文章:

json - RESTEasy 和 Jackson 提供程序无法将带有 @XmlIDREF 和 @XmlID 的实体序列化为 JSON

java - Jaxb - 忽略未知属性

java - Maven 阴影插件 ClassNotFoundException

Java 通配符上的通用混淆

java - 滑动选项卡时出错 - Android 应用程序

java - Spring webflow booking-faces 项目中 import.sql 的名称是否重要

java - JAXB2 将 xmlns 添加到 XML 输出

multithreading - 在单核系统中如何处理抢占?

java - 以特定的时间间隔调用java程序

c - 将系统命令的输出通过管道传输到文件