【问题标题】:Generate classes from xsd in Java ( Jaxb )在 Java ( Jaxb ) 中从 xsd 生成类
【发布时间】:2016-04-18 14:50:05
【问题描述】:

我需要一些帮助!我正在尝试从java中的xsd(使用eclipse)生成类,但我不知道该怎么做,我在很多教程中进行了搜索,但他们都谈到了首先创建类然后使用xsd。 我想使用 Jaxb 从 xsd 自动创建类。 你有什么建议或教程可以帮助我吗?

【问题讨论】:

  • 您可以考虑使用名为 XMLBeans 的工具。它有点旧且已弃用,但对于学生项目来说应该没问题(实际上我们在生产中使用它,但不要告诉任何人)。
  • 谢谢你的回复,但它不是学生项目,它是我的工作,我必须创建一个读取输入 XML 文件的应用程序,并将它们的内容存储在数据库中,(这就是我需要的原因使用 jaxb 从 Xml 创建类)

标签: java xml xsd jaxb


【解决方案1】:

使用JDK自带的xjc命令:

将 XML 模式文件编译成完全注释的 Java 类。

【讨论】:

  • 感谢您的回复,我可以创建一个自动执行此操作的应用程序吗?你知道任何可以帮助我的教程吗?请
  • 您可以运行xjc 可执行文件,也可以通过将tools.jar(来自JDK 的lib 文件夹)添加到您的类路径来直接调用它,然后调用com.sun.tools.internal.xjc.Driver.main(String[] args)
【解决方案2】:

我成功了! 我会展示我的解决方案,以防有人遇到同样的问题。 我在方法中使用了 ProcessBuilder 以便从 java 执行命令:

公共类 FromXmlToJava 实现 Runnable {

私有最终 InputStream 输入流;

 FromXmlToJava ( InputStream inputStream)
    {

     this.inputStream = inputStream;

    }

 private BufferedReader getBufferedReader(InputStream is) 
    {
      return new BufferedReader(new InputStreamReader(is));
    }

public void run() {

    BufferedReader br = getBufferedReader(inputStream);
    String ligne = "";
    try 
    {
        while ( (ligne = br.readLine() )!= null)
        {


            System.out.println(ligne);
        }


    } catch (IOException e) 

        {

            e.printStackTrace();
        }


}

public static class Main {
    // chemin de l'emplacement des classes generées 

    public static final String CHEMIN = "C:\\Users\\****";
     public static void main(String[] args) {
            try {
                ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C",
                        "C:\\Users\\***\\xjc.bat ***.xsd");

                // modifier le repertoire d'execution de la commande 

                pb.directory(new File(CHEMIN));



               /* Map env = pb.environment();
                for (Entry entry : env.entrySet()) {
                    System.out.println(entry.getKey() + " : " + entry.getValue());
                }

                env.put("MonArg", "Valeur");
                */
                Process p = pb.start();
                FromXmlToJava fluxSortie = new FromXmlToJava(p.getInputStream());
                FromXmlToJava fluxErreur = new FromXmlToJava(p.getErrorStream());
                new Thread(fluxSortie).start();
                new Thread(fluxErreur).start();
                p.waitFor();

            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
}
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多