如何在同一个ObjectFactory中生成多个.xsd?

时间:2013-08-30 17:39:49

标签: java xsd objectfactory cxf-xjc-plugin

我需要一个带有多个模式的多个java对象的ObjectFactory。我有几个不同的插件和这些插件的变种0运气。目前我正在使用以下内容:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-xjc-plugin</artifactId>
    <version>2.6.2</version>
    <configuration>
        <extensions>
            <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.6.2</extension>
        </extensions>
    </configuration>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>xsdtojava</goal>
            </goals>
            <configuration>
                <sourceRoot>${basedir}/target/generated-sources/xjc</sourceRoot>
                <xsdOptions>
                    <xsdOption>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmAdmEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmCnlEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmEqtEvent.xsd</xsd>
<packagename>com.mypackage</packagename>
                    </xsdOption>
                </xsdOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

使用此插件和许多其他插件,我只能生成一个只包含列表中最后一个模式的ObjectFactory。之前的xsds都没有在OF中作为java对象。 有人可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我有同样的问题,可以使用包装器XSD解决这个问题:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="schema1.xsd" />
    <xs:include schemaLocation="schema2.xsd" />
    <xs:include schemaLocation="schema3.xsd" />
</xs:schema>

当然,这不允许这些包含的XSD包含彼此或其他常见的XSD。如果“schema3.xsd”包含“schema2.xsd”,请从此列表中删除“schema2.xsd”。

答案 1 :(得分:0)

可以使用org.codehaus.mojo插件完成。在&#39; schemaFiles &#39;下提供多个架构文件。标记:

                <execution>
                    <id>xjc-generate-sources</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <extension>true</extension>
                        <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                        <schemaFiles>xsd1.xsd,xsd2.xsd</schemaFiles>
                        <packageName>pachage.name.to.generate.classes</packageName>
                        <outputDirectory>target/generated-sources</outputDirectory>
                        <clearOutputDir>false</clearOutputDir>
                    </configuration>
                </execution>