1

我获得了一组旧版 XSD,用于我的应用程序提供的服务,这些服务急需重构。由于某些消费者应用程序没有开发团队,因此我无法更改结果和架构。但是,我可以对实际文件做任何我想做的事情。

这是我的目录设置:

    • 子目录1
      • 常见的
      • 发展
    • 子目录2
      • 常见的
      • 发展

为简单起见,假设文件之间版本的增量将元素添加到 complexType,以便可以将以前的版本重新应用为基类/超类。

现在,在 subdir1/common 中,我可以拥有 Include_v01.xsd 和 Include_v02.xsd。在 subdir1/development 中,我可以拥有使用 Include_v01.xsd 的 svc1_v01.xsd 和使用 Include_v02.xsd 的 svc1_v02.xsd

在 Subdir2/common 中,我可以拥有 Include_v02.xsd 和 Include_v03.xsd 在 subdir2/developmen 中,我可以拥有使用 Include_v02.xsd 的 svc2_v01.xsd 和使用 include_v03.xsd 的 svc2_v02.xsd

我有大约 20 个这样的子目录。我在这些目录中有大约 1500 个左右的 XSD 文件。每个 xsd 可以有多个包含,它自己可以有多个包含,它自己可以有多个包含,等等。

最终,我想将它们重构为最简单的形式,例如,我只有一个 Include_v02.xsd 副本,而 Include_v02.xsd 实际上是从 Include_v01.xsd 构建的,而不是完全独立的副本. 是的,有些混蛋只是复制了文件,将其重命名,并添加了一个字段。然后他将它复制到将要使用的每个子目录中。

比这更重要的是能够生成类似结构的 java 类。

现在,我能做的最好的就是在目录上运行 xjc,并将每个服务的模式编译到不同的包中,所以我现在在各种 java 包中拥有大量 Include_v02 对象的副本。我必须这样做,因为架构没有在版本之间进行版本化或重新调整。同一个白痴只是复制文件,重命名它,并添加一个新元素,保持根元素相同,没有其他显着特征。

这是一个艰巨的任务,我会接受某种方式来轻松复制/合并 java 对象,甚至只是简单地在不同包中的相同 java 对象之间进行复制。

剧集文件,就像这里提到的那样,似乎并不比我现在用来生成东西的脚本更好,因为考虑到多层嵌套,我必须非常刻意地找出每个根元素用过的。

编辑============================= 如果我在 Include_v01.xsd 中有以下内容:

<complexType name="cmplxtp">
    <complexContent><sequence>
         <element name="st1" type="string"/>
     </complexContent></sequence>
</complexType>

而且,在 Include_v02.xsd 中,我有类似的东西

<complexType name="cmplxtp">
    <complexContent><sequence>
         <element name="st1" type="string"/>
         <element name="st2" type="string"/>
     </complexContent></sequence>
</complexType>

我会喜欢一些组合

将 XSD 重构为

Include_v01.xsd 同 Include_v02.xsd

或者

Include_v01.xsd Include_v02 中保留的所有单个元素(复杂或简单)以包含 Include_v01.xsd,仅添加了新元素

或者

两个java类

package pack1;
class cmplxtp {
    public String st1;
}

package pack2;
class cmplxtp extends pack1.cmplxtp  {
    public String st2;
}

java 类对我来说是最重要的,但任何有助于实现目标的东西都会非常出色。

如果这一切都不可能、简单或值得,我也非常感谢一些简单的方法来将相同的对象从一个复制到另一个,如果它们存在于不同的包中。我真的很想简化我的代码库,我有 160 个左右的服务,每个都有很多版本,每个版本都可以包含相同的精确文件。这意味着在我的生成代码中,我可能有 300 个或更多同一个类的定义,但由于复制的包含而在不同的包中。

4

0 回答 0