2017-11-15 2 views
0

Entwickelt einen Rest-Service, der Drittanbieter-Jars verwendet. Bei der Überprüfung ihres Codes habe ich festgestellt, dass sie ClassLoader.getSystemResource ("log4j.properties") verwenden, um die Daten abzurufen. Dieser Code gibt null zurück, und fortan erhalte ich immer eine Nullzeigerausnahme. Der gleiche Code, wenn ich in Websphere 8.5.5.7 bereitstellen und Server Classpath setzen, funktioniert es gut. Da ich Liberty in meiner lokalen Maschine verwende, ruft dies den Pfad nicht ab.Liberty Server - ClassLoader.getSystemResource gibt null zurück

Ich habe auch versucht, Classloader in server.xml, aber keine Verwendung.

<library id="config"> 
    <folder dir="/properties/dev/" includes="*.properties" scanInterval="5s"/> 
</library> 

<enterpriseApplication id="AbcEAR"location="AbcEAR.ear" name="AbcEAR"> 
    <classloader privateLibraryRef="config"/> 
</enterpriseApplication> 

Antwort

0

ClassLoader.getSystemResource() Verwendung wird das System Classloader verwenden, die nur in der Lage sein werden, die Dinge aus dem JDK zu sehen und was auf dem Classpath ist. Da Liberty keinen traditionellen Klassenpfad verwendet und stattdessen OSGi verwendet, wird der Systemlader in Liberty aus Anwendungsperspektive wenig nützlich sein.

Verwenden Sie stattdessen ClassLoader.getResource() aus dem Threadkontextklassenlader, der die Liberty-Klassenlader berücksichtigt.

+0

Danke Andy. Wie ich schon sagte, verwende ich Jars von Drittanbietern und ich habe keinen Zugang, um den Code zu aktualisieren. Ich habe versucht, den Klassenpfad zu finden und die Eigenschaftendatei zu platzieren, aber trotzdem null erhalten. –

+0

@Ctsuser haben Sie versucht, die Konfiguration des JVM-Klassenpfads in jvm.options hinzuzufügen, um/properties/dev hinzuzufügen? – Alasdair