使用XJC通过Mave从给定的XSD文件生成源

时间:2015-12-08 13:37:53

标签: java xml maven xsd jaxb2

我有两个XSD文件。一个用于生成一大堆Java源代码。我即将构建另一个XSD来为另一个项目创建类。我想使用第一个XSD的类构建作为"类型"在我的第二个XSD。 我尝试在第二个XSD中导入第一个XSD。 但是,通过这个,第一个XSD的一大堆类再次构建。 我想在我的新XSD中使用正确的引用(类名和包名)为旧的类构建一个新类。

样品: oldXSD:

   <xs:element name="OldClass",....
   <xs:element name="OtherClass1",...
   <xs:element name="OtherClass2",...
   etc

newXSD:

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://new.namespace.com"
    xmlns:empns="http://new.namespace.com" 
    xmlns:Q1="http://old.namespace.com">

    <xs:import namespace="http://old.namespace.com"
        schemaLocation="../oldXSD.xsd" />

    <xs:element name="bookingStatus" type="empns:BookingStatus"></xs:element>

    <xs:complexType name="BookingStatus">
        <xs:sequence>
            <xs:element name="userId" type="xs:string" minOccurs="1"
                maxOccurs="1" />
            <xs:element name="userName" type="xs:string"
                minOccurs="1" maxOccurs="1" />
            <xs:element name="oldclasses" type="Q1:OldClass" minOccurs="0"
                maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

</xs:schema>

pom-definition是这样的:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.6</version>
        <executions>
            <execution>
                <id>json</id>
                <goals>
                    <goal>xjc</goal>
                </goals>
                <configuration>
                    <outputDirectory>target/generated-sources/jaxb</outputDirectory>
                    <packageName>getting.started.with.jaxb.generated</packageName>
                    <schemaDirectory>src/main/resources/json</schemaDirectory>
                    <schemaFiles>newXSD.xsd</schemaFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>

任何想法如何完成这件事表示赞赏。我不知道怎么在这里继续。是否有#34;入门&#34;或其他类型的文件?我只发现了一些关于具体问题的讨论,但没有什么非常基本的。

1 个答案:

答案 0 :(得分:0)

您需要使用episodic compilation