Java 如何使用JAXB API从xsd生成类?

Java 如何使用JAXB API从xsd生成类?,java,jaxb,Java,Jaxb,我需要在不使用xjc命令或ant的情况下从.xsd生成bean类。我在ApacheAxis2中找到了实现,但无法生成工件 我已经编写了以下代码,但得到了NullPointerException: SchemaCompiler sc = XJC.createSchemaCompiler(); URL url = new URL("file://E:\\JAXB\\books.xsd"); sc.parseSchema(new InputSource(url.toExternalForm()))

我需要在不使用xjc命令或ant的情况下从.xsd生成bean类。我在ApacheAxis2中找到了实现,但无法生成工件

我已经编写了以下代码,但得到了NullPointerException:

SchemaCompiler sc = XJC.createSchemaCompiler();
 URL url = new URL("file://E:\\JAXB\\books.xsd");
 sc.parseSchema(new InputSource(url.toExternalForm()));
 S2JJAXBModel model = sc.bind();
 JCodeModel cm = model.generateCode(null, null);
 cm.build(new FileCodeWriter(new File("E:\\JAXBTest")));

有人能帮我/提供一些链接吗?

虽然我没有试过Axis2的XJC,但我试过Sun的,我很确定你的模式URL是错误的:你需要三个斜杠(因为“权威”部分被省略了,因为它是一个具有绝对路径的本地资源)

或者,更简单的是,构造一个文件并对其调用toURI(),如下所示:

SchemaCompiler sc = XJC.createSchemaCompiler();
File file = new File("D:\\my-dir\\my-schema.xsd");
sc.setErrorListener(... );
sc.parseSchema(new InputSource(file.toURI().toString()));
S2JJAXBModel model = sc.bind();
JCodeModel cm = model.generateCode(null, null);
cm.build(new File("."));

这为我生成了所需的文件。在类路径上需要tools.jar。代码生成快乐

虽然我没有试过Axis2的XJC,但我试过Sun的,我很确定您的模式URL是错误的:您需要三个斜杠(因为“权威”部分被省略了,因为它是具有绝对路径的本地资源)

    SchemaCompiler sc = XJC.createSchemaCompiler();
    File file = null;
    file = new File("Item.xsd");
    sc.parseSchema(new InputSource(file.toURI().toString()));
    S2JJAXBModel model = sc.bind();

    JCodeModel cm = model.generateCode(null, null);
    cm.build(new File("."));
或者,更简单的是,构造一个文件并对其调用toURI(),如下所示:

SchemaCompiler sc = XJC.createSchemaCompiler();
File file = new File("D:\\my-dir\\my-schema.xsd");
sc.setErrorListener(... );
sc.parseSchema(new InputSource(file.toURI().toString()));
S2JJAXBModel model = sc.bind();
JCodeModel cm = model.generateCode(null, null);
cm.build(new File("."));
这为我生成了所需的文件。在类路径上需要tools.jar。代码生成快乐

    SchemaCompiler sc = XJC.createSchemaCompiler();
    File file = null;
    file = new File("Item.xsd");
    sc.parseSchema(new InputSource(file.toURI().toString()));
    S2JJAXBModel model = sc.bind();

    JCodeModel cm = model.generateCode(null, null);
    cm.build(new File("."));
//我在本地目录中有Item.xsd,这段代码生成了类。如果我在本地删除这个xsd,将得到空指针异常。 还要注意的是,我在eclipse项目的Java构建路径中有与jaxb相关的JAR

//我在本地目录中有Item.xsd,这段代码生成了类。如果我在本地删除这个xsd,将得到空指针异常。
还要注意的是,我在eclipse项目的Java构建路径中有与jaxb相关的JAR

它在名为::generated的包中生成代码。请告诉我如何在特定位置生成.cm.build(新的FileCodeWriter(新文件(“E:\\JAXBTest”))//此行将在“E:\\JAXBTest\generated”下生成我不想要的代码。它在名为::generated的包中生成代码。请告诉我如何在特定位置生成.cm.build(新的FileCodeWriter(新文件(“E:\\JAXBTest”))//此行将在“E:\\JAXBTest\generated”下生成代码,这是我不想要的。