XML Stream Exception abfangen

Diskutiere XML Stream Exception abfangen im XML und Co. Forum; Hallo Zusammen, ich habe folgendes Problem. Ich möchte eine XML Datei (in meinem Fall ein PNML Format) einlesen. Wenn die Datei allerdings...

  1. Markus_667
    Markus_667 Mitglied
    Hallo Zusammen,

    ich habe folgendes Problem. Ich möchte eine XML Datei (in meinem Fall ein PNML Format) einlesen. Wenn die Datei allerdings fehlerhaft ist, möchte ich, dass das Programm weiter läuft und eine Meldung kommt, dass die Datei fehlerhaft ist.

    Folgendes habe ich programmiert:
    --> Hier wird der Parster gestartet:
    Code (Java):
    int state = loadFile.showOpenDialog(null);
                    if (state == JFileChooser.APPROVE_OPTION) {
                        selectedFile = loadFile.getSelectedFile();
                        PNMLParser PNMLParser = new PNMLParser(selectedFile, grafikObj);
                    }
    --> Hier ist der PNML Parser:
    Code (Java):
    public final void parse() {
            while (xmlParser.hasNext()) {
                try {
                    XMLEvent event = xmlParser.nextEvent();
                    switch (event.getEventType()) {
                    case XMLStreamConstants.START_ELEMENT:
                        handleStartEvent(event);
                  .
                  .
                  .
                 } catch (XMLStreamException e) {
                    System.err.println("Fehler beim Parsen des PNML Dokuments. " + e.getMessage());
                    e.printStackTrace();
                        break;
    Nun stürzt das Programm aber doch ab und kann nicht mehr weiter bearbeitet werden.
    Ich meine aber doch, dass ich mit dem try catch Block das abgefangen habe ?
    Anscheinend bin ich aber auf dem Holzweg ??
    Muss ich beim Aufruf des Parsers auch noch einmal einen try catch Block machen ?

    Ich schaue da nicht richtig durch, vielleicht kann mir dabei noch jemand helfen.

    Danke
     
  2. Vielleicht hilft dir dieser Kurs hier weiter (Klick!)
  3. olfibits
    olfibits Mitglied
    Bitte die geworfene Fehlermeldung posten, damit klar ist, was abgefangen werden muss.
     
  4. Markus_667
    Markus_667 Mitglied
    Worauf muss ich beim Lesen der Fehlermeldung achten ?
    Bis jetzt sehe ich nur welche Exception auftritt und an welcher Zeile.
    (Also die Aufrufreihenfolge bis Zeile 125)
    Zeile 125:
    XMLEvent event = xmlParser.nextEvent();

    Code (Java):
    javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
    Message: Content ist nicht zulässig in Prolog.
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
        at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Source)
        at XX.PNMLParser.parse(PNMLParser.java:125)
        at XX.PNMLParser.<init>(PNMLParser.java:93)
        at XX.Optionen$5.actionPerformed(Optionen.java:196)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
    Fehler beim Parsen des PNML Dokuments. ParseError at [row,col]:[1,1]
    Message: Content ist nicht zulässig in Prolog.
    Die Fehlermeldung läuft dann in einer Dauerschleife bis ich abbreche.
     
    Zuletzt bearbeitet: 13. Feb. 2018
  5. olfibits
    olfibits Mitglied
    Daher die Dauerschleife. Aber:
    hier wird eigentlich die bemängelte Exception geworfen. Versuche mal explizit javax.xml.stream.XMLStreamException.
    Sollte das nichts bringen versuche mal ein nicht besonders schönes, allgemeines "Exception e" im catch.
    Zum Schluss allerdings scheint die Exception geworfen worden zu sein, wie es aussieht. ("Fehler beim Parsen...")
    Normalerweise sollte die vorige Meldung eigentlich nicht auftauchen sondern einfach nur der Exception-Block ausgeführt werden.

    Andere Frage: soll die Datei jetzt bei deinem Test valide sein oder nicht? Wenn ja haben wir ein weiteres Problem.
     
  6. Markus_667
    Markus_667 Mitglied
    Nein es soll keine valide Datei sein, die Datei ist eine absichtliche erzeugte mit Fehlern behaftete Datei.
    Danke schon mal.
    Probiere ich heute Abend mal aus.
     
  7. mrBrown
    mrBrown Bekanntes Mitglied
    Fang die Exception außerhalb der Schleife und nicht innerhalb.

    Wo und wie wird parse aufgerufen?
     
  8. Markus_667
    Markus_667 Mitglied
    parse wird im Konstruktor aufgerufen mit this.parse().

    Stimmt eigentlich, warum mache ich das in der Schleife... völlig unnötig.
    Super Idee, danke :)
     
  9. mrBrown
    mrBrown Bekanntes Mitglied
    Dann wirf die Exception besser weiter und fang sie außerhalb des Konstruktors ;)

    (Ich würde in dem Fall auch Konstruktor und das starten des Parsens trennen, meistens ist das problematisch)
     
  10. Markus_667
    Markus_667 Mitglied
    So ich habe das Problem gelöst. Danke an mrBrown und olfibits. Hat beides zur Lösung beigetragen.
    Dickes Merci
     
  11. mrBrown
    mrBrown Bekanntes Mitglied
    Wie hast du‘s denn gelöst?
     

Die Seite wird geladen...

XML Stream Exception abfangen - Ähnliche Themen

InputStream im Servlet wirft Exception
InputStream im Servlet wirft Exception im Forum Java Basics - Anfänger-Themen
Woher kommen diese Exceptions (StreamCorruptedException,OptionalDataException)?
Woher kommen diese Exceptions (StreamCorruptedException,OptionalDataException)? im Forum Netzwerkprogrammierung
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] im Forum Allgemeine Java-Themen
Exception bei einem InputStream
Exception bei einem InputStream im Forum Java Basics - Anfänger-Themen
Java.io.ioexception: Stream closed
Java.io.ioexception: Stream closed im Forum Java Basics - Anfänger-Themen
Thema: XML Stream Exception abfangen