【发布时间】:2013-07-25 04:53:41
【问题描述】:
我正在处理将 XML 节点转换为 JPA 实体的任务。 XML 中的对象与实体所表示的对象相似,但并不完全相同。看来我前面会有很多转换代码。
XML 在 Schema .xsd 文件中定义,我使用 JAXB 生成类并创建实例。上面的决定是不要触及生成的类型。我将为他们每个人创建转换器,也许我会使用访问者模式,还不知道。
让我烦恼的是有人决定更改 .xsd 文件并且不会更新负责的转换器。
我的想法是让这些转换器类维护一个静态的最终字段列表,这些字段来自适当的 JAXB 类,这些字段在代码中处理。如果有人在 .xsd 文件中更改它们,则会记录一些警告,指出某些字段尚未处理,或者某些已处理的字段不再存在。
此外,我想确保转换器的数量与 JAXB 生成的类的数量相匹配。 怎么做?
也许我应该以某种方式检查执行时间可以从 .xsd 文件生成哪些类,并将它们与注册的转换器进行比较。我觉得我不能只扫描特定包中的类来检查 JAXB 输出类。
也许访问者模式可以告诉我出了什么问题,但延长检查直到实际发生 XML-JPA 转换错误可能是个坏主意。
【问题讨论】:
-
如果您在构建过程中生成类,那么如果有人更改了XSD文件并且对于未处理的字段,应该通知可以实现缺失的人字段。没有简单的解决方案。
-
他们应该通知,但你永远不知道他们是否会......虽然,预防措施可能会花费我更多的时间而不是值得的。
-
如果您希望您的 XSD 独立于您的目标 Java 类而发展,我建议不要使用 JAXB。相反,您可以让您的转换器使用 XPath 表达式从 XML 文件中众所周知的位置提取数据。如果架构更改,某些路径可能不再有效,但 XPath 不会崩溃,您可以记录一些警告消息。
-
只要你正确生成JAXB类,它就会产生编译时错误,对于其他人你应该编写测试用例或某种进行验证的代码
-
xsd 和实体类已给出,我对它们没有权力。我只能翻译,而且必须是“手动”翻译。