使用 XSD 架构来描述 Java 由 'storeToXML ' 生成的属性

Use XSD schema to describe Java Properties generated by 'storeToXML '

我使用 Properties#storeToXMLjava.util.Properties 转换为 XML 格式。但是,默认情况下它会生成 XML 和 DTD 架构:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    ...
</properties>

是否可以改用 XSD 架构?我该如何重新配置​​它?

使用默认的 classes,似乎无法将文档类型声明更改为基于 XSD 的方法。

但似乎有一种 插件 干预 XML 存储行为的方法(至少在 Java 8 中):方法 Properties.storeToXml 内部委托给 loaded XmlPropertiesProvider(来自包 sun.util.spi)。

此属性提供程序通过检查系统 属性“sun.util.spi.XmlPropertiesProvider”或(如果未找到)通过使用 service loader mechanism.

加载它来加载

通过这种方法,您可以自己实现一个 XmlPropertiesProvider(它是一个抽象 class,方法 loadstore)并执行那些 XML以你自己的方式部分。


至少从 2016 年 5 月开始,Properties class 使用 jdk.internal.util.xml.PropertiesDefaultHandler 和以下硬编码对象实例来存储和加载 XML:

PropertiesDefaultHandler handler = new PropertiesDefaultHandler();

这意味着以下代码将不再用于为基于 XML 的属性设置默认处理程序:

System.setProperty(
    "sun.util.spi.XmlPropertiesProvider",
    XmlPropertiesTransformer.class.getCanonicalName()
);

似乎没有办法引入不同的处理程序,因为 PropertiesDefaultHandler class 不允许注入自定义处理程序。