使用 XSD 架构来描述 Java 由 'storeToXML ' 生成的属性
Use XSD schema to describe Java Properties generated by 'storeToXML '
我使用 Properties#storeToXML 将 java.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,方法 load
和 store
)并执行那些 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 不允许注入自定义处理程序。
我使用 Properties#storeToXML 将 java.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,方法 load
和 store
)并执行那些 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 不允许注入自定义处理程序。