0

我一直在尝试使用 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 级!总的来说,这些包含是有原因的,即它们被多次重复使用。

我拥有超过 120 个服务,每个服务都有一个请求和响应 XSD,并且可能有一半具有上述多个版本。我设法将其重构为总共 636 个文件,这绝非易事。

我不想将 300 个相同的常见事物的副本生成到单独的包中,所以我尝试使用 .episode 文件。这行得通,但仅限于 3 个深度的包含级别。如果我尝试包含超过 3 个 .episodes,xjc 就会死掉。我尝试将剧集放入 jar 文件中,然后意识到它只会以这种方式查找一集。如果我尝试将剧集的内容合并到一个文件中,它也不起作用。

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

4

1 回答 1

0

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

于 2012-12-06T17:44:43.770 回答