Kai: Xpath-Ausdruck funktionierte früher - jetzt nicht mehr

Hallo!

Ich verstehe es einfach nicht! Vielleicht könnt ihr mir ja weiterhelfen. Ich teste gerade mein Servlet und möchte im Text einer xml-Datei nach einem String suchen - hier mal einen Ausschnitt aus dem Quellcode

Document xmlDoc=null;
String   strSuch = "abschnitt";
String   strGSuch = strSuch.substring(0,1).toUpperCase()+strSuch.substring(1, strSuch.length());
try {
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  dbf.setValidating(false);
  xmlDoc = dbf.newDocumentBuilder().parse("test.xml");
  NodeList nlTreffer=XPathAPI.selectNodeList(xmlDoc,"//text()[contains(.,'"+strSuch+"') or contains(.,'"+strGSuch+"')]");
} catch(ParserConfigurationException pce) {
  System.err.println("Fehler bei Erzeugung DocumentBuilder");
} catch(SAXException se) {
  System.err.println("Fehler beim Parsen");
} catch(IOException ioe) {
  System.err.println("IO-Fehler beim Parsen");
}

Nach dem Ausführen des XPath-Ausdrucks gibt er mir einen Internal Server Error zurück! Ich hatte vor dem Aufruf NodeList nlTreffer eine Textausgabe, die führt er noch aus! Kann mir jmd sagen, was daran falsch ist?

Viele Grüße
Kai

  1. Hallo,

    ich verstehe so ungefähr, was das bewirken soll (Code ohne Kommentare ist miserabler Code!), aber warum ...

    try {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      dbf.setValidating(false);
      xmlDoc = dbf.newDocumentBuilder().parse("test.xml");
      NodeList nlTreffer=XPathAPI.selectNodeList(xmlDoc,"//text()[contains(.,'"+strSuch+"') or contains(.,'"+strGSuch+"')]");
    } catch(ParserConfigurationException pce) {
      System.err.println("Fehler bei Erzeugung DocumentBuilder");
    } catch(SAXException se) {
      System.err.println("Fehler beim Parsen");
    } catch(IOException ioe) {
      System.err.println("IO-Fehler beim Parsen");
    }

    Nach dem Ausführen des XPath-Ausdrucks gibt er mir einen Internal Server Error zurück! Ich hatte vor dem Aufruf NodeList nlTreffer eine Textausgabe, die führt er noch aus!

    ... fängst Du nicht gezielt die Exception, die Dein XPath-Ausdruck wirft?
    Wenn man weiß, wo der Fehler auftritt, ist es doch naheliegend, sich darüber zu informieren, *welcher* Fehler auftritt.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      danke für deine Antwort! Also genau weiß ich nicht, wo meine Exception auftritt, sonst hätt ich wohl nicht gefragt! ich dachte bisher dass halt mein XPath-Ausdruck einfach falsch ist und dachte jmd, der Ahnung hat, sieht vielleicht gleich wo es falsch sein könnte, aber ich habe jetzt festgestellt, dass xmlDoc null ist, und dadurch kann natürlich kein XPath-Ausdruck durchgeführt werden! Frage mich nur, wieso das nicht mehr so geht wie es immer ging! Bin wirklich ratlos

      LG Kai

      1. Hallo,

        danke für deine Antwort! Also genau weiß ich nicht, wo meine Exception auftritt, sonst hätt ich wohl nicht gefragt!

        Du schriebst aber, dass er genau an der Stelle auftritt. Woher soll *ich* wissen, dass Du *nicht* weißt, wo er auftritt?

        ich dachte bisher dass halt mein XPath-Ausdruck einfach falsch ist und dachte jmd, der Ahnung hat, sieht vielleicht gleich wo es falsch sein könnte, aber ich habe jetzt festgestellt, dass xmlDoc null ist, und dadurch kann natürlich kein XPath-Ausdruck durchgeführt werden!

        Und was hast Du unternommen, um *die* Anweisung, die dafür sorgt, dass xmlDoc ein Wert zugewiesen wird, exakter zu untersuchen.

        Frage mich nur, wieso das nicht mehr so geht wie es immer ging! Bin wirklich ratlos

        Andere Javaversion? Andere Datei? Weißt Du, die Informationen, die Du gibst sind in etwa so aussagekräftig, wie die Kommentare, die Dein Quellcode enthält.

        Lass Dir doch gezielt ausgeben, was es zur Exception, die auftritt, an Informationen gibt. Du bekommst ganz offensichtlich eine Exception, die nicht zu den Fällen gehört, die Du fängst.

        Freundliche Grüße

        Vinzenz

        1. Naja man kann ja wissen, ab wann das Programm nicht mehr richtig läuft, aber nicht wieso es genau an der Stelle auftritt ;)

          naja bei meiner Exception, hab ich ein getMessage mit ausgeben lassen und die sagt mir, dass das Programm die dtd nicht findet, als reines java-programm tritt der Fehler nicht auf (läuft einwandfrei), nur wenn ichs als Servlet laufen lasse! Verstehe ich aber nicht, denn die dtd liegt in dem Verzeichnis, wo die xml-Datei liegt :(

          Nur so zur Information, wir arbeiten schon länger mit der gleichen Java-Version, daran kann es eigentlich nicht liegen! Klar die xml-Datei ist eine andere, weil es ein anderes Projekt ist, aber die Informationen der dtd sind anders und ich kann die Datei ja problemlos über den Internet Explorer anzeigen, d.h. in der Datei sind keine Fehler drinnen - würd ich so mal behaupten! kannst mich natürlich eines besseren belehren. wenn ihm normalerweise die dtd im Verzeichnis fehlt, zeigt er nämlich im IE eine Fehlermeldung an!

          Apropos bei getMessage kommt raus File "dm_...190.dtd" not found!

          So gehe jetz heim - programmiere dann morgen weiter
          Viele Grüße
          Kai

          1. Das Problem ist ja dass er die dtd nicht findet, ich habe in meiner xml-Datei folgenden Eintrag:

            <!DOCTYPE dmodule SYSTEM "dm_aecma_avee_d_190.dtd">

            Weiß jemand woran es liegen könnte, dass er die Datei nicht findet, obwohl sie im gleichen Verzeichnis wie die xml-Datei liegt! Daran liegt es nämlich, dass es nicht funktioniert! Da er die Datei nicht parsen kann ist xmlDoc null und wenn ich auf xmlDoc zugreifen möchte, wird eine Exception ausgelöst

            LG Kai

  2. Hallo Kai,

    Nach dem Ausführen des XPath-Ausdrucks gibt er mir einen Internal Server Error zurück!

    Woher weißt Du, dass das nach Ausführen des XPath-Ausdrucks ist, vor allem direkt danach? "Internal Server Error" sagt dir lediglich "irgendetwas hat nicht funktioniert". Du solltest mal ins Logfile schauen und herausfinden, was wirklich der Fehler ist.

    Grüße

    Daniel