2017-05-11 2 views
0

Ich versuche eine Eigenschaftendatei in Java zu laden, die auf JBossFuse/karaf läuft.Laden der Eigenschaftendatei vom Dateisystem in Jboss Fuse/Karaf wirft Nullpointer

Die Datei wird bei $ gelegen [karaf.home] /etc/bean.properties

Der Kodex ist in der Lage Eigenschaften innerhalb des Bündels fein zu laden, aber jetzt versuche ich, die Eigenschaften aus dem Projekt auszuschließen selbst und Der Code löst eine Nullpointer-Exception aus.

Der Weg richtig auf meine Entwicklung Maschine als

C aufgelöst wird: \ Benutzer \ jemand \ DevStudio \ Runtimes \ jboss-Sicherung-6.3.0.redhat-135 \ etc \ bean.properties

Die Property-Datei kann in den Blueprint-XML geladen werden, um Beans zu konfigurieren, aber um auf die Bean zugreifen zu können, benötigt mein Code den CamelContext. Da ich einige statische Codeblöcke habe, auf die ohne Austausch/Kontext/Registrierung zugegriffen wird, wollte ich auch in der Lage sein, die Eigenschaften in Java zu laden.

Beide Funktionen werfen die NullPointerException und ich denke, es liegt daran, dass der Code in Fuse ausgeführt wird.

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; 
} 

Die Ausnahme:

java.lang.NullPointerException bei java.util.Properties $ LineReader.readLine (Properties.java:434) [: 1.8.0_91] bei java.util .Properties.load0 (Properties.java:353) [: 1.8.0_91] unter java.util.Properties.load (Properties.java:341) [: 1.8.0_91] unter com.mycompany.util.PropertyLoader.getProperties (PropertyLoader.java:19)[319:camel-archextype-blueprint:0.14] bei com.mycompany.camel.blueprint.MyProcessor.process (MyProcessor.java:21) [319: camel- Archetyp-Blueprint: 0.0.14] bei org.apache.camel.processor.DelegateSyncProcessor.process (DelegateSyncProcessor.java:63) [231: org.apache.camel.camel-core: 2.17.0.redhat-630135] at org.apache.camel.management.InstrumentationProcessor.process (InstrumentationProcessor.java:77) [231: org.apache.camel.camel-core: 2.17.0.redhat-630135] bei org.apache.camel.processor. RedeliveryErrorHandler.process (RedeliveryErrorHandler.java:468) [231: org.apache.camel.camel-core: 2.17.0.redhat-630135] bei org.apache.camel.processor.CamelInternalProcessor.process (CamelInternalProcessor.java:196) [231: org.apache.camel.camel-core: 2.17.0.redhat-630135] bei org.apache.camel.processor.Pipeline.process (Pipeline.java:121) [231: org.apache.camel .camel-core: 2.17.0.redhat-630135] bei org.apache.camel.processor.Pipeline.process (Pipeline .java: 83) [231: org.apache.camel.camel-core: 2.17.0.redhat-630135] bei org.apache.camel.processor.CamelInternalProcessor.process (CamelInternalProcessor.java:196) [231: org .apache.camel.camel-core: 2.17.0.redhat-630135] bei org.apache.camel.component.timer.TimerConsumer.sendTimerExchange (TimerConsumer.java:192) [231: org.apache.camel.camel- core: 2.17.0.redhat-630135] bei org.apache.camel.component.timer.TimerConsumer $ 1.run (TimerConsumer.java:76) [231: org.apache.camel.camel-core: 2.17.0. redhat-630135] bei java.util.TimerThread.mainLoop (Timer.java:555) [: 1.8.0_91] bei java.util.TimerThread.run (Timer.java:505) [: 1.8.0_91]

Jede Hilfe würde sehr geschätzt werden.

+0

Angesichts Ihrer Kommentare, ich empfehle Ihnen, lesen Sie "OSGi in Aktion" Buch –

Antwort

1

Nicht das tun. Sie suchen nach Ärger.

  1. Lasteigenschaften der OSGi (verwenden sie CFG als Erweiterung und ein Entwurf property-placeholder Bohne)
    Sie haben den zusätzlichen Vorteil (wenn Sie möchten)
  2. injizieren sie in einer Bohne, wenn die Dateiänderungen benachrichtigt zu werden SELBST WENN Sie nur statische Methoden verwenden.
    Mischen Sie keine verwalteten Beans mit nicht verwaltetem statischem Code, wenn Sie nicht genau wissen, was Sie tun.

Wenn einige „statische“ Code erfordert Eigenschaften bedeutet, dass es Stateful ist, und diese Klasse verdient eine Bean instanziiert zu werden.

+0

Bedeutet, ich sollte die aktuelle "property-bean" bekommen und es an eine Initialisierung übergeben? Zum Beispiel brauche ich die Eigenschaften, um eine Datenbankverbindung zu definieren. – user2122552

+0

Ja, setze das "property-bean" in eine andere Bean. Wenn Sie Datenbankzugriff benötigen, warum verwenden Sie keine Datenquelle? –

+0

@ user2122552 siehe http://stackoverflow.com/questions/43465689/configuring-database-connection-in-jboss-fuse/43476015#43476015 –

Verwandte Themen