Castor生成的类(XML编组) - XSD不可用

时间:2012-02-04 16:44:51

标签: xsd reverse-engineering castor jaxp

我最近搬到了一个项目,我注意到有一个特定的要求将一些数据存储为XML。

之前的团队使用Castor生成的类来为Marshall和Unmarshall提供数据。

我现在有一个新要求,要求我在这个XML中添加一些额外的(可选的)字段。但是我意识到先前的团队根本没有在XSD上签到,我无法与他们联系。

XSD肯定是庞大而复杂的,因为它负责生成大约50个类。因此,再次编写XSD会容易出错,而且我现在最终可能会创建与旧XML兼容的XML。

我想到的另一个选择是使用像XML Spy这样的工具并尝试从XML反向设计XSD,但这听起来有点困难,因为我需要对20多个XML进行逆向工程以生成XSD然后合并所有这些XSD合二为一,因为XML有几个可选部分。这种方法仍然存在错误因素。

我能想到的最佳选择是将类反向设计为XSD - 但Castor据称不支持此功能。所以我没有办法将这些Castor生成的类转换回XSD!虽然Castor生成的类确实有一些Castor特定方法,但实际上如果忽略Castor特定方法它们就是Pojos!

我们是否有任何关于从java类获取或生成XSD的建议?我们还有其他建议可以解决我讨论过的问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

只是更新,虽然我没有达到我想要的100%,但我能够使用JAXB的schemagen工具成功地对XSD进行逆向工程。

请注意,castor会为每个类生成一个XXXDescriptor,因为它不映射到实际的XSD,不会将XXXDescriptor类作为输入传递给schemagen工具。

schemagen工具使用getter方法,并忽略Castor的validate,marshall和unmarshall等方法。

与我第一次发布问题时的情况相比,这一点看起来很有希望。

感谢。