Исключение Vert.x-Config при чтении файла свойств с комментариями - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в vert.x и пытаюсь внедрить его в новый проект на работе.

Я пытался использовать модуль Vert.x-Config для чтения иерархических .propertiesфайл.По какой-то причине я получаю исключение из io.vertx.config.impl.ConfigRetrieverImpl («Ошибка при сканировании конфигурации - ArrayIndexOutOfBoundsException: 1»), когда я пытаюсь прочитать файл с комментариями (начиная с # или! Какзадокументировано в синтаксисе .properties) или с пустыми строками.

Это ошибка в vertx-config или я что-то не так делаю?

Код, который я использую для чтения файла:

ConfigStoreOptions propertyWitHierarchical = new ConfigStoreOptions()
            .setFormat("properties")
            .setType("file")
            .setConfig(new JsonObject()
                    .put("path", "app.properties")
                    .put("hierarchical", true));
    ConfigRetrieverOptions options = new ConfigRetrieverOptions()
            .addStore(propertyWitHierarchical);
    ConfigRetriever configRetriever = ConfigRetriever.create(Vertx.vertx(), options);

Я получаю исключение:

io.vertx.config.impl.ConfigRetrieverImpl
SEVERE: Error while scanning configuration
java.lang.ArrayIndexOutOfBoundsException: 1
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.lambda$toJson$1(PropertiesConfigProcessor.java:122)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:479)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.toJson(PropertiesConfigProcessor.java:130)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.readAsJson(PropertiesConfigProcessor.java:113)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor.lambda$process$0(PropertiesConfigProcessor.java:70)
    at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:272)
    at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)

Обновление # 1

Это пример файла свойств, который я использовал

# Server A address
serverA.addr=127.0.0.1

! Server A port
serverA.port=8080

# Server B address
serverB.addr=127.0.0.1

! Server B port
serverB.port=8080

1 Ответ

0 голосов
/ 05 февраля 2019

После изучения исходного кода vertx-config я обнаружил ошибку в классе PropertiesConfigProcessor.Кажется, что метод toJson не позаботился о комментариях и пустых строках, поэтому я добавил исправление ошибки (в ожидании подтверждения) в проект vertx-config.

Исправление заключалось в добавлении фильтра вПоток API, который должен фильтровать пустые строки и строки, начинающиеся с "#" или "!"(это правильный синтаксис комментариев в файлах свойств).

...