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

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

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

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

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

C: \ Users \ кто-то \ devstudio \ runtimes \ jboss-fuse-6.3.0.redhat-135 \ etc \ bean.properties

Свойство File можно загрузить в 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] в 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. camel-core: 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] на org.apa che.camel.processor.CamelInternalProcessor.process (CamelInternalProcessor.java:196) [231: org.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] в org.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]

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


person user2122552    schedule 11.05.2017    source источник
comment
Учитывая ваши комментарии, я настоятельно рекомендую вам прочитать книгу OSGi в действии.   -  person Alessandro Da Rugna    schedule 12.05.2017


Ответы (2)


Не делайте этого. Вы ищете неприятностей.

  1. Загрузите свойства способом OSGi (используйте .cfg в качестве расширения и bean-компонента blueprint property-placeholder). У вас есть дополнительное преимущество, заключающееся в получении уведомления об изменении файла (если хотите)
  2. Внедряйте их в bean-компонент, ДАЖЕ ЕСЛИ вы используете только статические методы.
    Не смешивайте управляемые bean-компоненты с неуправляемым статическим кодом, если вы не очень хорошо знаете, что делаете.

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

person Alessandro Da Rugna    schedule 12.05.2017
comment
Значит, я должен получить текущий компонент-свойство и передать его инициализации? Например, мне нужны свойства для определения соединения с базой данных. - person user2122552; 12.05.2017
comment
Да, установите компонент свойства внутри другого компонента. Если вам нужен доступ к базе данных, почему бы вам не использовать источник данных? - person Alessandro Da Rugna; 12.05.2017
comment
@ user2122552 см. stackoverflow.com / questions / 43465689 / - person Alessandro Da Rugna; 12.05.2017

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

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

person janstey    schedule 12.05.2017