xjc和大量的剧集文件

时间:2012-06-22 19:21:41

标签: java jaxb xsd xjc

我一直在尝试使用JAXB-RI和它的xjc为我的XSD生成类(当我说我的XSD时,我的意思是可怕地完成XSD。稍后会详细介绍)。

我遇到的第一个问题是,整个设置中只有两个完整的命名空间。尽管如此,同样的事情在单独的文件中定义了多次,名称略有不同,但XSD中没有任何区别。例如,我可以有两个XSD

bar_v01_00.xsd

<xsd:schema xmlns="http://www.foo.com/" targetNamespace="http://www.foo.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="foo">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:element name="elem1" type="xsd:string" />
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

bar_v02_00.xsd

<xsd:schema xmlns="http://www.foo.com/" targetNamespace="http://www.foo.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="foo">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:element name="elem1" type="xsd:string" />
                <xsd:element name="elem2" type="xsd:string" />
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

所以,同名,相同名称空间,只是不同的文件。我通过指定两个不同的包来解决这个问题,所以bar_v01_00.xsd会进入

package www.foo.com.bar.Major01.Minor00;

和bar_v02_00.xsd会编译成

package www.foo.com.bar.Major02.Minor00;

不确定,当然,但有效。现在,这些文件可以包含/导入,每个文件本身都可以有更多的包含/导入,其中一些可以深入32级!通过和更大,这些包括是有原因的,包括它们被重复使用多次。

有&gt;我有120项服务,每项服务都有一个请求和响应XSD,可能有一半有多个版本,如上所述。我已经设法将这个重构为636个文件,这绝非易事。

我不想在单独的包中生成300份相同的常用内容,所以我尝试使用.episode文件。这是有效的,但只有3个深度值的包括。如果我尝试包含超过3个.episodes,xjc就会死掉。我尝试将剧集放入一个jar文件中,然后意识到它只能找到一集。如果我尝试将剧集的内容合并到一个文件中,它也不起作用。

我能做什么,还是我被困在这里?

1 个答案:

答案 0 :(得分:0)

我找到了一种更好的方法,可以将所有相关的剧集文件添加到一个大的文件中。需要一些工作,一些解析和一些思考,但它都是自动化的并且有效。