我已经为我的应用程序提供的服务提供了一套传统的XSD,这些服务需要DIRE重构。由于一些消费者应用程序没有开发团队,我无法更改结果模式。但是,我可以对实际文件做任何我想做的事。
这是我的目录设置:
为简单起见,假设文件之间的版本增量会将一个元素添加到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对象。
剧集文件,比如提到here,似乎没有比我现在用来生成内容的脚本更好,因为我必须非常刻意地找出每个根元素,给出使用的多层嵌套。
EDIT ============================= 如果我在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
OR
Include_v01.xsd中保留所有单个元素(复杂或简单) Include_v02包括Include_v01.xsd,只添加了新元素
OR
两个java类
package pack1;
class cmplxtp {
public String st1;
}
和
package pack2;
class cmplxtp extends pack1.cmplxtp {
public String st2;
}
java类对我来说是最重要的,但任何有助于实现这一目标的东西都会非常出色。
如果这一切都不可能,简单或值得,我还要感谢一些简单的方法将相同的对象从一个复制到另一个,如果它们存在于不同的包中。我只是想简化我的代码库,我有160个左右的服务,每个服务都有很多版本,每个反面都可以包含相同的EXE文件。这意味着在我的gen'd代码中,我可能有300个或更多相同类的定义,但由于复制的包含在不同的包中。