Загрузка файла свойств из файловой системы в Jboss Fuse / Karaf выбрасывает Nullpointer

Я пытаюсь загрузить файл свойств в Java, работающий на JBossFuse/karaf.

Файл находится в $[karaf.home]/etc/bean.properties

Код может нормально загружать свойства внутри пакета, но теперь я пытаюсь исключить свойства из самого проекта, и код выдает исключение Nullpointer-Exception.

Путь правильно определен на моей машине для разработки как

C:\Users\ кто \ DevStudio\ автономной работы \ JBoss-плавкая 6.3.0.redhat-135\ и т.д. \bean.properties

Файл-свойство может быть загружен в blueprint-XML для настройки bean-компонентов, но для доступа к bean-компоненту мой код нуждается в CamelContext. Поскольку у меня есть некоторые статические кодовые блоки, доступ к которым осуществляется без обмена / контекста / реестра, я также хотел иметь возможность загружать свойства в Java.

Обе функции выдают исключение NullPointerException, и я думаю, это потому, что код работает в Fuse.

public static Properties getProperties(String location) {
    Properties prop = new Properties();
    InputStream input = null;

    try {
        input = PropertyLoader.class.getClassLoader().getResourceAsStream(location);
        prop.load(input);
    } catch (IOException ex) {
        log.error("Error loading properties file from: " + location, ex);
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
    return prop;
}

public static Properties getPropertiesFromFilesystem(String location) {
    Properties prop = new Properties();
    InputStream input = null;

    try {
        input = new FileInputStream(location);
        prop.load(input);
    } catch (IOException ex) {
        log.error("Error loading properties file from: " + location, ex);
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
    return prop;
}

Исключение:

java.lang.NullPointerException в java.util.Properties$LineReader.readLine(Properties.java:434)[:1.8.0_91] в java.util.Properties.load0(Properties.java:353)[:1.8.0_91] в java.util.Properties.load(Properties.java:341)[:1.8.0_91] at com.mycompany.util.PropertyLoader.getProperties(PropertyLoader.java:19)[319: верблюжий-архетип-план:0.0.14] в com.mycompany.camel.blueprint.MyProcessor.process(MyProcessor.java:21)[319:camel-archetype-blueprint:0.0.14] в org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[231:org.apache.camel. верблюд-ядро: 2.17.0.redhat-630135] в org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[231: или g.apache.camel.camel-core: 2.17.0.redhat-630135] в org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в орг..apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:192)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:76)[231:org.apache.camel.camel-core:2.17.0.redhat-630135] в java.util.TimerThread.mainLoop(Timer.java:555)[:1.8.0_91] в java.util.TimerThread.run(Timer.java:505)[:1.8.0_91]

Любая помощь будет высоко оценен.

2 ответа

Решение

Не делай этого. Вы ищете проблемы.

  1. Загрузите свойства способом OSGi (используйте.cfg как расширение и чертеж property-placeholder боб)
    У вас есть дополнительное преимущество получения уведомления об изменении файла (если вы хотите)
  2. Внедрите их в боб, даже если вы используете только статические методы.
    Не смешивайте управляемые компоненты с неуправляемым статическим кодом, если вы не очень хорошо знаете, что делаете.

Если некоторый "статический" код требует свойств, это означает, что он является состоящим из состояния, и этот класс заслуживает того, чтобы его экземпляр был реализован в bean-компоненте.

Не уверен, почему вы получаете NPE без более полного примера. Если вам нужно использовать свойства без маршрута, вы должны использовать средства-заполнители свойств Camel:

https://access.redhat.com/documentation/en-us/red_hat_jboss_fuse/6.3/html/apache_camel_development_guide/basicprinciples

Другие вопросы по тегам