java - 如何管理 XML 模式及其生成的类的版本和部署?
问题描述
我们维护多个通过 XML 进行通信的项目。接口在 XML 模式(.xsd
文件)中定义。我们使用 JAXB 从这些模式生成类,然后在项目中使用。我们还使用这些.xsd
文件来验证输入或输出。
有时,我们需要更新模式以创建可能向后兼容也可能不向后兼容的新版本。
我们如何有效地管理这些模式?项目应该能够选择他们想要使用的模式的哪个版本。如果每个项目的构建都不必再次集成和维护类生成步骤,那就太好了。有什么好的做法吗?
我目前正在考虑两种选择:
将生成的类打包为工件并将它们部署到项目可以从中提取它们的 Maven 存储库。项目不必处理类生成,但对
.xsd
文件本身的访问变得更加复杂。将模式作为 Git 子模块拉入项目中。这提供了对模式文件的简单访问,但每个项目的构建都必须为生成类而烦恼。
解决方案
基本上,除非模式非常稳定,否则 JAXB(以及一般的 XML 数据绑定)不是一个好主意。您可能使用了错误的技术。使用多个版本的模式意味着您正在使用多个版本的已编译 Java 代码,而这始终是维护的噩梦。
这可能不是一个有用的建议,但我的建议是,不要从这里开始。如果架构的多个版本需要共存,那么您需要一种不需要每次架构更改时都重新编译应用程序的技术;查看通用的低级 API(如 JDOM2 或 XOM)或声明性的面向 XML 的语言(如 XSLT、XQuery 或 LINQ)。
推荐阅读
- javascript - 如何向 w2ui 表单和弹出组件添加自定义功能?
- python - VS Code:“打开文件夹”让我的 PySpark 无法工作?
- python - 如何访问仅获取列表中的日期?Python
- swift - 闭包变量不捕获字符串
- regex - 用逗号拆分字符串,同时忽略逗号前后的空格
- streaming - 数据流作业在 GroupByKey() 之后不发出消息
- javascript - jsrender模板调用一个javascript函数
- websocket - WebRTC wssURL 和 ICE 设置
- pyspark - parquet 中的 Athena 类型 INT64 与表模式中定义的类型 double 不兼容
- google-sheets - 数组公式和计数