2

Apache Commons Configuration2を使用してInputStreamからデータを読み取るにはどうすればよいですか?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)) 

上記のコードを与えると、setFileNameに空の文字列が指定されている場合、以下の例外が発生します。

org.apache.commons.configuration2.ex.ConfigurationException: Could not locate: [email protected][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) 

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) 

答えて

0

あなたはXMLConfiguration.read(InputStream in)を使用することができますが、私の知る限り、あなたはどこかでXMLファイルを持っている必要があります。その理由は、あなたが上記のreadメソッドをビルダーから取得するか、loadメソッド(XMLConfiguration.java in the source filesの963行目)にいくつかのチェックがある場合です。

Parameters params = new Parameters(); 
    FileBasedConfigurationBuilder<XMLConfiguration> fileBuilder = 
      new FileBasedConfigurationBuilder<>(XMLConfiguration.class) 
      .configure(params.fileBased().setFileName("/tmp/dummy.xml"));` 

    XMLConfiguration xmlConfiguration = fileBuilder.getConfiguration(); 
    xmlConfiguration.read(inputStream); 

ダミーファイルは整形式であれば何でもかまいませんが、有効である必要はありません。私の場合、/tmp/dummy.xmlには<_/>が含まれています。 example in the api documenationから

0

:その後、あなたのFileparameters(エンコードとな)

FileBasedBuilderParameters fileparams = ...  
    FileBasedConfigurationBuilder<PropertiesConfiguration> builder = 
        new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class).configure(fileparams); 

を設定し、

FileBasedConfiguration config = builder.getConfiguration(); 
FileHandler fileHandler = new FileHandler(config); 
Inputstream istream = ... 
fileHandler.load(istream); 

は、あなたがこれで自動保存を使用することはできません注意してください。保存するには、おそらくOutputstreamを用意する必要があります。

XMLConfiguration cfg = new BasicConfigurationBuilder<>(XMLConfiguration.class).configure(new Parameters().xml()).getConfiguration(); 
FileHandler fh = new FileHandler(cfg); 
fh.load(inputStream); 

ロードした設定が含まれますload()cfgを呼び出した後:ような何か:次のように入力ストリームからロードXML設定データの

config.save(ostream) 
0

適切な方法(コモンズ・コレクション2.xでは)です。

XMLConfiguration.read()メソッドを使用しないでください。このメソッドは内部使用向けに設計されているため、将来は_read()に名前が変更されます(https://issues.apache.org/jira/browse/CONFIGURATION-641参照)。

関連する問題