使用 XSD 模式描述由 'storeToXML ' 生成的 Java 属性



i使用属性#storetoxml将java.util.Properties转换为XML格式。但是,默认情况下,它使用DTD模式生成XML:

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

是否可以使用XSD模式?我该如何重新配置?

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

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

此属性提供商可以通过检查系统属性" Sun.util.spi.xmlpropertiesProvider"来加载。或(如果找不到的话)通过使用服务加载机机构加载。

使用这种方法,您可以自己实现XmlPropertiesProvider(这是一个带有方法loadstore的抽象类),并以您自己的方式进行XML零件。


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

PropertiesDefaultHandler handler = new PropertiesDefaultHandler();

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

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

似乎没有一种引入其他处理程序的方法,因为PropertiesDefaultHandler类不允许注入自定义处理程序。

最新更新