/ / Typesafe ConfigFactory chyba s rezervovanými znakmi - java, typafe, hocon

Typesafe ConfigFactory chyba s rezervovanými znakmi - java, typesafe, hocon

Ahoj, snažím sa načítať konfiguráciu z reťazca v Java takto:

@Test
public void testIllegalCharacter(){
String input = "prop=\asd";
Config conf = ConfigFactory.parseString(input);
}

Vyššie uvedený kód spôsobuje nasledujúcu chybu:

com.typesafe.config.ConfigException$Parse: String: 1: Expecting a value but got wrong token: "" (Reserved character "" is not allowed outside quotes) (if you intended "" (Reserved character "" is not allowed outside quotes) to be part of a key or string value, try enclosing the key or value in double quotes, or you may be able to rename the file .properties rather than .conf)

Chápem, že mám v mojom reťazci nelegálny charakter. Ako nájdem celú množinu nelegálnych znakov?

Ak (napríklad) prevediem tento reťazec na a Properties objekt a potom ho analyzujte pomocou ConfigFactory.parseProperties Vidím hodnotu "\asd" v uznesení ako "asd". Takže niektoré musia existovať dezinfekciu dúfam, že sa deje v knižnici špeciálnych zbranítúto sanitáciu nazývam sám sebou, ale neviem ako. Analyzovanie vlastností nie je uskutočniteľným riešením, pretože konfiguráciu môžu tvoriť aj objekty alebo zoznamy.

Má niekto nejaký návrh, ako vyriešiť tento problém?

Môže niekto poukázať na všetky rezervované znaky?

Veľká vďaka

odpovede:

0 pre odpoveď č. 1

Ak chybové hlásenie správne pochopím, mali by ste okolo seba uviesť úvodzovky, napríklad špeciálne znaky, napr. ako toto:

"prop="\asd"";

Nie ste si istí, prečo chcete definíciu vlastnosti so spätným lomítkom a („a“), ale myslím, že to nemusím vedieť :-)


0 pre odpoveď č. 2

Myslím, že som našiel odpoveď. Musím nastaviť ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES)

, Ktorá pracuje pre nižšie uvedený test:

@Test
public void test(){
String input = "prop=C:/MyDocuments/mydir";
Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
assertEquals("C:/MyDocuments/mydir", conf.getAnyRef("prop"));
}

Ale nebude fungovať pre test s spätnými lomkami

@Test
public void test(){
String input = "prop=C:\MyDocuments\mydir";
Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
assertEquals("C:\MyDocuments\mydir", conf.getAnyRef("prop"));
}

Čo zlyhá:

org.junit.ComparisonFailure:
Expected :C:MyDocumentsmydir
Actual   :C:MyDocumentsmydir

Nie som si teda istý, či je to konečná odpoveď ...