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 참조).