Hallo,
ich versuche verzweifelt eine XML-Datei zu parsen, bekomme jedoch immer eine „File not Found Exception“
-----------schnipp--------------------------------------
String config_file_path = servletContext.getRealPath(„jsp\config.xm“);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(config_file_path);
-----------schnapp--------------------------------------
Es kommt immer die Meldung, dass die Datei "C:\Programme\WebSphere\appServer\installedApps\test.ear\test-war\jsp\config.xml nicht gefunden werden kann, aber genau da liegt die Datei die ich parsen möchte! Wenn ich die Pfadangabe aus der Fehlermeldung im NT-Explorer eingebe, wird die Datei auch geöffnet und im Browser angezeigt, d.h die Methode getRealPath() liefert prinzipiell schon mal das richtige Ergebnis.
Hat irgendeiner eine Idee was das Problem ist?
Ich verwende WebSphere als Applicationserver und versuche das ganze im ersten Schritt lokal unter NT zum laufen zu bekommen.
Moin
Vergleiche:
String config_file_path =
servletContext.getRealPath(„jsp\config.xm“);
und
"C:\Programme\WebSphere\appServer\installedApps\test.ear\test-war\jsp\config.xml
Fehler in der ersten Zeile, das muss natürlich „jsp/config.xml“ sein. Bei java und Dateinamen immer „/“ nicht „“… ausserdem fehlt ein „l“
cu
Hallo Pumpkin,
es wäre schön wenn es so einfach wäre, aber leider sind deine Anmerkungen nur auf einem Schreibfehler beim Erstellen des Artikels zurückzuführen. Ich habe versucht den Programmcode aus dem Gedächnis wiederzugeben und dabei ist mir der Schreibfehler unterlaufen, hier noch mal richtig:
-----------schnipp--------------------------------------
menu_config_file_location = servletContext.getRealPath(„jsp/navigation/nav_config.xml“);
log.debug(menu_config_file_location);
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(menu_config_file_location );
}
catch(Exception e)
{
log.error("Exception caught in Main: ",e);
}
-----------schnapp--------------------------------------
Das Ganze gibt folgende Ausgabe im Logfile:
DEBUG [Servlet.Engine.Transports:9] jsp.TestNavigation (201) - C:\Programme\WebSphere\AppServer\installedApps\test.ear\test-webapp.war\jsp\navigation\nav_config.xml
ERROR [Servlet.Engine.Transports:9] jsp.TestNavigation (232) - Exception caught in Main:
org.xml.sax.SAXParseException: File „C:\Programme\WebSphere\AppServer\installedApps\test.ear\test-webapp.war\jsp\navigation\nav_config.xml“ not found.
Das Problem ist das die Datei genau da liegt, wo das Programm sie laut Fehlermeldung nicht finden kann…
Muss man evt. in irgendeinem Konfigurationsfile der Webanwendung das Verzeichnis …\jsp\navigation angeben, damit der Applicationserver auch darauf zugreifen kann? Wobei, wenn es daran liegen würde, müsste doch eine andere Exception geschmissen werden, oder?
Viele Grüße
Kathrin
Moin
Also doch etwas komplexer…
menu_config_file_location ist och ein String, oder ? Dann benutzt das
Document doc = builder.parse(menu_config_file_location );
den String als URI. URI’s die auf Dateien verweisen müssen mit file:// anfangen. Test mal:
Document doc = builder.parse(**new File (**menu_config_file_location) );
Was mich dabei aber schwer verwundert ist der Wortlaut der Exception, danach hat das System eindeutig erkannt dass es eine Datei sein sollte… ?
Muss man evt. in irgendeinem Konfigurationsfile der Webanwendung
das Verzeichnis …\jsp\navigation angeben, damit der
Applicationserver auch darauf zugreifen kann?
An sich nicht, es sein den der Server ist etwas komisch konfiguriert.
Wobei, wenn es
daran liegen würde, müsste doch eine andere Exception
geschmissen werden, oder?
Ja da müsst dann eine SecurityException kommen. Das ist aber nicht bei allen Servlet-servern so, also ganz 100% drauf verlassen kann man sich nicht.
cu
menu_config_file_location ist och ein String, oder ? Dann
benutzt das Document doc = builder.parse(menu_config_file_location );
den String als URI. URI’s die auf Dateien verweisen müssen mit
file:// anfangen. Test mal:
Document doc = builder.parse(new File
( menu_config_file_location) );
Hallo,
Ja menu_config_file_location ist ein String. Dein Beispiel habe ich auch schon ausprobiert. Dann bekomme ich keine FileNotFoundException, aber das Object doc ist null, bzw. leer, oder bedeutet die Logausgabe etwas anderes?
Document doc = builder.parse(new File(menu_config_file_location));
log.debug („doc“ + doc.toString());
–> Logausgabe: doc[#document: null]
So langsam bin ich am Verzweifeln… theoretisch müsste es so klappten, aber praktisch…
Moin
Teste mal das hier (doc ist das Document):
Element E = doc.getDocumentElement();
trace (E);
wobei trace diese Methode ist:
public void trace (Node N){
//logausgabe attributes, nodevalue und nodeattributes von N
NodeListe NL = N.getChildNodes();
for (int i =0;i
Wenn's nix bringt: das Interface org.xml.sax.ErrorHandler implementieren und beim parsen mitschreiben.
(Das Document wurde korrekt geladen, sonst würde da eine NullPointerException kommen)
cu