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.
@NicolasFilotto das ResourceBundle-Objekt ist immer Null ... Ich denke, dies kann passieren, da die Anwendung die Eigenschaftendatei nicht finden kann. – Jay
@NicolasFilotto Ich habe es herausgefunden. Die Datei fehlt in der kompilierten Webanwendung. Maven macht das. – Jay