Apache Commons Configuration2 如何从 InputStream 读取数据

Bru*_*uce 5 java apache-commons xml-configuration apache-commons-config

如何使用 Apache Commons Configuration2 从 InputStream 读取数据?

FileBasedConfigurationBuilder<XMLConfiguration> builder = 
    new FileBasedConfigurationBuilder<XMLConfiguration>(XMLConfiguration.class)
        .configure(
            new Parameters()
            .xml()
            .setFileName("")
            .setExpressionEngine(new XPathExpressionEngine())
        );

XMLConfiguration config = builder.getConfiguration();
config.read(sourceJarFile.getInputStream(sourcePropertiesEntry))
Run Code Online (Sandbox Code Playgroud)

给出上面的代码,如果 setFileName 为空字符串,我将得到以下异常。

org.apache.commons.configuration2.ex.ConfigurationException: Could not locate: org.apache.commons.configuration2.io.FileLocator@61dc03ce[fileName=tmp.xml,basePath=<null>,sourceURL=,encoding=<null>,fileSystem=<null>,locationStrategy=<null>]
at org.apache.commons.configuration2.io.FileLocatorUtils.locateOrThrow(FileLocatorUtils.java:346)
at org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:972)
at org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:702)
at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initFileHandler(FileBasedConfigurationBuilder.java:312)
at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:291)
at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:60)
at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:421)
at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:285)
at com.test.installer.App.getXMLConfigurationProperties(App.java:185)
Run Code Online (Sandbox Code Playgroud)

如果我给 null 或只是不调用 setFileName(); 我将在 read() 行获得无法加载配置异常。

org.apache.commons.configuration2.ex.ConfigurationException: Unable to load the configuration
    at org.apache.commons.configuration2.XMLConfiguration.load(XMLConfiguration.java:986)
    at org.apache.commons.configuration2.XMLConfiguration.read(XMLConfiguration.java:954)
    at com.test.installer.App.updateExistedProperties(App.java:84)
Run Code Online (Sandbox Code Playgroud)

Alf*_*Alf 0

您可以使用XMLConfiguration.read(InputStream in),但据我所知,您需要在某处有一个 XML 文件。原因是,当您从构建器获取配置或调用read上面的方法时,私有方法中会有一些检查(源文件中 XMLConfiguration.javaload中的第 963 行)。

\n\n
    Parameters params = new Parameters();\n    FileBasedConfigurationBuilder<XMLConfiguration> fileBuilder =\n            new FileBasedConfigurationBuilder<>(XMLConfiguration.class)\n            .configure(params.fileBased().setFileName("/tmp/dummy.xml"));`\n\n    XMLConfiguration xmlConfiguration = fileBuilder.getConfiguration();\n    xmlConfiguration.read(inputStream);\n
Run Code Online (Sandbox Code Playgroud)\n\n

虚拟文件可以是任何内容,只要它格式良好即可,它不需要有效。就我而言,/tmp/dummy.xml仅包含<_/>.

\n