XML Konfiguration + Struts2

Status
Nicht offen für weitere Antworten.

Sempah

Bekanntes Mitglied
Hallo zusammen,

da ich ich meiner WebAnwendung auf eine DB zugreife, habe ich die Daten in eine Art config.xml gepackt, von der ich innerhalb der WebAnwendung zugreifen möchte.

Hier meine Projektstruktur:

Code:
project
-src
  -de.package.app
    -DbAnzeigen.java
  -de.package.app.util
    -Config.java
    -ConfigReader.java
  -struts.xml
-configuration
  -configuration.xml
-WebContent
  -pages
    -DbAnzeigen.jsp
  -WEB-INF
    -lib
    -web.xml
  -index.html

- index.html starten -> Link auf DbAnzeigen.action -> zeigt auf de.package.app.DbAnzeigen.java -> result: DbAnzeigen.jsp

- in der DbAnzeigen.java rufe ich meinen ConfigReader auf und deseralisiere die configuration.xml in ein JavaObjekt (Config.java).

Java:
....
public String execute() {
  Config config = ConfigReader.getConfig();
  String dbUrl = config.getDbUrl();
  ...

Jedoch wird die Datei "configuration.xml" nicht gefunden (-> configuration.xml (Das System kann die angegebene Datei nicht finden)
Jetzt habe ich schon versucht die Datei an sämtlichen Stellen hinzukopieren, aber nichts klappt.

Wenn ich eine normale Java-Class mit main-Methode schreibe und
Java:
private Config config = ConfigReader.getConfig();
String dbUrl = config.getDbUrl();

... ausführe, wird die Datei gefunden und auch der korrekte Wert ausgegeben.
Es scheint also irgendwie ein Problem innerhalb der "Struts2"-Java Class zu sein.

Hat jmd einen Vorschlag?
 
M

maki

Gast
Denke das Problem ist, dass die confiuguration.xml wohl im Classpath liegen sollte, also unter src.
 

Sempah

Bekanntes Mitglied
Das liegt nicht daran.

Hier mein ConfigReader:

Java:
public class ConfigurationReader {
	
	private static final String CONFIGURATION_XML = "configuration.xml";
	private static Config config = new Config();
		
	public static Config getConfig() {
		try {
			JAXBContext context = JAXBContext.newInstance(Config.class);
			Unmarshaller um = context.createUnmarshaller();
			config = (Config) um.unmarshal(new FileReader(CONFIGURATION_XML));
		} catch (JAXBException jae) {
			System.out.println(jae.getMessage());
		} catch (IOException ioe) {
			System.out.println(ioe.getMessage());
		}
		return configuration;
	}
}

Aufruf der Config in einer "normalen" Klasse (funktioniert):
Java:
public class Test {

	private static Config config;
	
	public static void main(String[] args) {
		config  = ConfigReader.getConfig();
		System.out.println(config.getParameterX());
	}	
}

Aufruf innerhalb der Struts2 Datei (funktioniert nicht):
Java:
private Config config;

public String execute() {
   config  = ConfigReader.getConfig();
   String parameterX = config.getParameterX();

configuration.xml befindet sich im project\src\ Verzeichnis
 

Sempah

Bekanntes Mitglied
bin habe ich nicht -.-
Aber falls du das "WEB-INF\classes" - Verzeichnis meinst, ja da ist sie. Genauso wie die struts.xml (welche benötigt wird).

Ich satrte nach wie vor das Project aus der IDE heraus und es wird temporär im folgenden Verzeichnis ausgeführt:

workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\projectx
 
M

maki

Gast
Würde nciht über einen FileReader gehen, da dieser eine Datei (samt Pfad) erwartet, würde die Datei als RessourceStream vom ClassLoader laden lassen.
 

Sempah

Bekanntes Mitglied
Irgendetwas kommt mir da spanisch vor:

Java:
config = (Config) um.unmarshal(ClassLoader.getSystemResourceAsStream(CONFIGURATION_XML));

lasse mir jetzt zusätzlich via System.out.println(configuration.getParameterX()); in der ConfigReader-Datei einen Parameter angeben.

Wenn ich dies nun von der "normalen" Java Datei aufrufe erhalte ich den Inhalt von ParameterX.
Aus der WebApp erhalte ich immer noch nichts. Folgende Exception:

Exception: is parameter must not be null
Exception: [Ljava.lang.StackTraceElement;@7f8062
null

----

null wäre die Ausgabe von ParameterX


// EDIT: ahh Cnfig.class.getResourceAsStream..
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben