2016-11-21 2 views
0

Ich arbeite an Refactoring einer großen Sammlung von Code in einer unternehmenskalierten Anwendung.ResourceBundle ist nicht in der Lage, Eigenschaftendatei aus dem Paket in einer Webanwendung zu laden

Der erste Schritt, den ich machen möchte, ist die Log-Nachrichten zu lokalisieren, also entschied ich mich, die StringManager zu verwenden, die ich sah, als ich den Quellcode von Apache Tomcat las.

Die Grundidee besteht darin, in den Paketen eine Datei mit dem Namen LocalString.properties zu deklarieren und in ihnen Protokollnachrichten zu definieren. So in einer Art und Weise, diese lokalisiert die Saiten Rahmen dieses Pakets nur, so dass es aussieht:

Application 
`----src 
| `----main 
|   `----java 
|    `----package 
|     `----BusinessAction.java 
|     `----LocalStrings.properties 
`----pom.xml 

Und ein Ziel dieser StringManager instanziiert wie:

private static final StringManager sm = StringManager.getManager("package"); 

Dies ist der Konstruktor der Klasse StringManager.

Dies funktioniert absolut einwandfrei, wenn es in einer eigenständigen Anwendung verwendet wird, verursacht jedoch Probleme, wenn es in einer Webanwendung verwendet wird.

Ich verstehe nicht, warum das Bündel nicht auf die erste Hand laden, aber im catch-Block kann ich definitiv sagen, dass es weil der Klassenlader eine Instanz von WebappClassloader ist.

Welchen Fehler mache ich hier? Was wären die guten Möglichkeiten, diese Eigenschaftendatei zu laden?


bearbeiten

Das Problem hier ist mit den Maven bauen. Maven verarbeitet alle Ressourcen in src/main/resources und ignoriert die in src/main/java. Am Ende hatte die kompilierte Anwendung nicht die LocalStrins.properties Datei, wo sie sein sollte.

Gelöst, indem Sie package in src/main/resources erstellen und die Datei dort hineinlegen.

+0

@NicolasFilotto das ResourceBundle-Objekt ist immer Null ... Ich denke, dies kann passieren, da die Anwendung die Eigenschaftendatei nicht finden kann. – Jay

+0

@NicolasFilotto Ich habe es herausgefunden. Die Datei fehlt in der kompilierten Webanwendung. Maven macht das. – Jay

Antwort

3

Der Grund, warum es fehlschlägt, ist einfach, dass die Datei LocalStrings.properties nicht in Ihrer WAR-Datei ist. In einem Maven-Projekt sollen Ressourcen unter src/main/resources liegen. Nicht src/main/java. Maven ignoriert Ressourcen einfach unter src/main/java, so dass sie überhaupt nicht in der erstellten Webanwendung enthalten sind und daher zur Laufzeit nicht verfügbar sind.

+0

Ich kenne diese Eigenschaft von Maven, aber diese Eigenschaft Dateien sollen in Paketen existieren ... – Jay

+0

Na und? Verwenden Sie einfach dieselbe Verzeichnisstruktur unter src/main/resources. Am Ende wird alles in das Verzeichnis WEB-INF/classes Ihrer Webapp zusammengeführt. –

+0

Tatsächlich haben wir geändert, wie diese Anwendung gebaut wird. Es gibt ein Mojo, das es in die Tomcat-Instanz assembliert, nachdem der Compiler es kompiliert hat. – Jay

Verwandte Themen