2

Comment lire les données d'InputStream à l'aide de Apache Commons Configuration2? Donne le code ci-dessus, j'obtiendrai l'exception ci-dessous si le setFileName est donné chaîne vide.Apache Commons Configuration2 comment lire les données d'InputStream

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) 

Si je donne la valeur null ou simplement ne pas appeler setFileName(); Je vais obtenir l'impossibilité de charger l'exception de configuration sur la ligne 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) 

Répondre

0

Vous pouvez utiliser XMLConfiguration.read(InputStream in), mais pour autant que je sache, vous devez avoir un fichier XML quelque part. La raison en est que lorsque vous obtenez la configuration du constructeur ou appelez la méthode read ci-dessus, il existe quelques vérifications dans la méthode privée load (ligne 963 dans le XMLConfiguration.java in the source files).

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); 

Le fichier factice peut être tout aussi longtemps qu'il est bien formé, il n'a pas besoin d'être valide. Dans mon cas, /tmp/dummy.xml contient juste <_/>.

0

De l'example in the api documenation:

Définissez vos Fileparameters (encodage et tels)

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

puis:

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

note que vous ne pouvez pas utiliser AutoSave avec cela. Pour économiser, vous devrez probablement fournir un flux de sortie. Quelque chose comme:

config.save(ostream) 
0

Une bonne façon des données de configuration XML de chargement de flux d'entrée (dans commons-collections 2.x) est la suivante:

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

Après avoir appelé load()cfg contiendra la configuration chargée. Notez également que l'utilisation de la méthode XMLConfiguration.read() ne doit pas être utilisée car cette méthode est conçue pour une utilisation interne et sera probablement renommée _read() dans le futur (voir: https://issues.apache.org/jira/browse/CONFIGURATION-641).