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
(这是一个带有方法load
和store
的抽象类),并以您自己的方式进行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
类不允许注入自定义处理程序。