Class SaxHandler

  • All Implemented Interfaces:
    org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

    public class SaxHandler
    extends org.xml.sax.helpers.DefaultHandler
    SAX-Handler für den Zugriff auf die XML-Datei.

    Datensätze können Felder und Listen (im folgenden NonPlains genannt) enthalten. Würde man die XML-Datei "von Hand" verarbeiten, so hätte eine Methode datenVerarbeiten wohl einen rekursiven Aufbau (vgl DataGenerator.DataCycler#setRandomData(Data):

    
     IF (tag == "attribut") THEN
     		// Wert aus XML-Datei lesen
     ELSE IF (tag == "feld") THEN
     		FOR ALL (Feldelemente) DO
     			datenVerarbeiten();
     		ENDFOR
     ELSE IF (tag == "liste") THEN
     		FOR EACH (listenelement) DO
     			datenVerarbeiten();
     		ENDFOR
     ENDIF
     

    Durch die Art des Einlesens der XML-Datei mit dem SAX-Parser (jedes Lesen eines Start-/Ende-Tags löst Aufruf einer der hier zu findenden Call-Back-Methoden aus), ist das rekursive Abarbeiten nicht möglich ==> Über einen Stack wird erreicht, daß die Zuordnung der eingelesenen Attribute zu den richtigen Einträgen in der rekursiven Datenstruktur gelingt:

    Ein Datensatz vom Typ Data wird "lazy" erzeugt, d. h. enthält er ein NonPlain, so wird beim Erzeugen eines Data lediglich eine "flacher" Datenstruktur erzeugt, in die wiederum Datas für die NonPlains eingesetzt werden, die wiederum Datas für NonPlains enthalten können usw.

    Die o. g. zunächst erzeugte flache Datenstruktur ist data. Jedes weitere für NonPlains erzeugte Data wird auf einen Stack gelegt. Durch readTop() wird nun erreicht, daß beim Einlesen eines Attributs immer das Data-Element gefüllt wird, welches sich gerade in Bearbeitung befindet, d. h. der Stack bildet das "Gedächtnis" des Parsers und "aus Sicht der Attribute" ist nur dieses Data-Element bekannt, wie es auch in einer rekursiven Methode der Fall wäre.

    • Constructor Summary

      Constructors 
      Constructor Description
      SaxHandler()
      Creates a new instance of SaxHandler
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void characters​(char[] ch, int start, int length)
      Callback-Methode für die Verarbeitung von Characters.
      void endDocument()
      Ende des Dokuments erreicht
      void endElement​(java.lang.String uri, java.lang.String localName, java.lang.String qName)
      Ende-Tag gefunden.
      void error​(org.xml.sax.SAXParseException e)
      Fehler
      void fatalError​(org.xml.sax.SAXParseException e)
      Schwerer Fehler
      org.xml.sax.InputSource resolveEntity​(java.lang.String publicId, java.lang.String systemId)  
      void setConnection​(de.bsvrz.dav.daf.main.ClientDavInterface cdi)
      Die DaV-Verbindung der Applikation im SAX-Handler eintragen
      void setDataGenerator​(DataGenerator dg)
      Den Datengenerator im SAX-Handler eintragen
      void setDataModel​(de.bsvrz.dav.daf.main.config.DataModel dm)
      Das Datenmodell der Applikation im SAX-Handler eintragen
      void setIsInVerify​(boolean iiv)
      Festlegen, ob sich der Parser in der Verifizierung befindet
      void setRequestedObjects​(java.util.List objects)
      Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen
      void setSendQueue​(SendInterface sq)
      Sende-Queue der Applikation im SAX-Handler eintragen (in diesen werden die aus der XML-Datei gelesenen Telegramme geschrieben, so daß sie vom Sende-Thread verschickt werden können)
      void setTimeStampOption​(int tso)
      Option für den Zeitstempel setzen: Entweder werden die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben
      void skippedEntity​(java.lang.String name)  
      void startDocument()
      Callback-Methode für Start des XML-Dokuments
      void startElement​(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes attributes)
      Start-Tag gefunden.
      void warning​(org.xml.sax.SAXParseException e)
      Warnung
      • Methods inherited from class org.xml.sax.helpers.DefaultHandler

        endPrefixMapping, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, startPrefixMapping, unparsedEntityDecl
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SaxHandler

        public SaxHandler()
        Creates a new instance of SaxHandler
    • Method Detail

      • characters

        public void characters​(char[] ch,
                               int start,
                               int length)
                        throws org.xml.sax.SAXException
        Callback-Methode für die Verarbeitung von Characters.
        Specified by:
        characters in interface org.xml.sax.ContentHandler
        Overrides:
        characters in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        ch - Feld mit den erparsten chars
        start - Startposition
        length - Länge des Feldes
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • endDocument

        public void endDocument()
                         throws org.xml.sax.SAXException
        Ende des Dokuments erreicht
        Specified by:
        endDocument in interface org.xml.sax.ContentHandler
        Overrides:
        endDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • endElement

        public void endElement​(java.lang.String uri,
                               java.lang.String localName,
                               java.lang.String qName)
                        throws org.xml.sax.SAXException
        Ende-Tag gefunden.
        Specified by:
        endElement in interface org.xml.sax.ContentHandler
        Overrides:
        endElement in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        uri - URI des Tags
        localName - Bezeichner
        qName - Qualifizierter Name
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • error

        public void error​(org.xml.sax.SAXParseException e)
                   throws org.xml.sax.SAXException
        Fehler
        Specified by:
        error in interface org.xml.sax.ErrorHandler
        Overrides:
        error in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - Den Fehler auslösende Exception
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • fatalError

        public void fatalError​(org.xml.sax.SAXParseException e)
                        throws org.xml.sax.SAXException
        Schwerer Fehler
        Specified by:
        fatalError in interface org.xml.sax.ErrorHandler
        Overrides:
        fatalError in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - Den fatalen Fehler auslösende Exception
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • setConnection

        public void setConnection​(de.bsvrz.dav.daf.main.ClientDavInterface cdi)
        Die DaV-Verbindung der Applikation im SAX-Handler eintragen
        Parameters:
        cdi - Die DaV-Verbindung der Applikation
      • setDataGenerator

        public void setDataGenerator​(DataGenerator dg)
        Den Datengenerator im SAX-Handler eintragen
        Parameters:
        dg - DataGenerator, von dem aus u. a. dieses Objekt der Klasse gestartet wurde.
      • setDataModel

        public void setDataModel​(de.bsvrz.dav.daf.main.config.DataModel dm)
        Das Datenmodell der Applikation im SAX-Handler eintragen
        Parameters:
        dm - Das Datenmodell der Applikation
      • setIsInVerify

        public void setIsInVerify​(boolean iiv)
        Festlegen, ob sich der Parser in der Verifizierung befindet
        Parameters:
        iiv - True, wenn in der Verifizierung, sonst False
      • setRequestedObjects

        public void setRequestedObjects​(java.util.List objects)
        Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen
        Parameters:
        objects - Die gewünschten Objekte
      • setSendQueue

        public void setSendQueue​(SendInterface sq)
        Sende-Queue der Applikation im SAX-Handler eintragen (in diesen werden die aus der XML-Datei gelesenen Telegramme geschrieben, so daß sie vom Sende-Thread verschickt werden können)
        Parameters:
        sq - Die Sende-Queue
      • skippedEntity

        public void skippedEntity​(java.lang.String name)
                           throws org.xml.sax.SAXException
        Specified by:
        skippedEntity in interface org.xml.sax.ContentHandler
        Overrides:
        skippedEntity in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • startDocument

        public void startDocument()
                           throws org.xml.sax.SAXException
        Callback-Methode für Start des XML-Dokuments
        Specified by:
        startDocument in interface org.xml.sax.ContentHandler
        Overrides:
        startDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • startElement

        public void startElement​(java.lang.String uri,
                                 java.lang.String localName,
                                 java.lang.String qName,
                                 org.xml.sax.Attributes attributes)
                          throws org.xml.sax.SAXException
        Start-Tag gefunden.
        Specified by:
        startElement in interface org.xml.sax.ContentHandler
        Overrides:
        startElement in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        uri - URI des Tags
        localName - Bezeichner
        qName - Qualifizierter Name
        attributes - Liste der Attribute des Tags
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • setTimeStampOption

        public void setTimeStampOption​(int tso)
        Option für den Zeitstempel setzen: Entweder werden die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben
        Parameters:
        tso - Gibt an, ob die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschoben werden sollen.
      • warning

        public void warning​(org.xml.sax.SAXParseException e)
                     throws org.xml.sax.SAXException
        Warnung
        Specified by:
        warning in interface org.xml.sax.ErrorHandler
        Overrides:
        warning in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - Die Warnung auslösende Exception
        Throws:
        org.xml.sax.SAXException - bei Problemen
      • resolveEntity

        public org.xml.sax.InputSource resolveEntity​(java.lang.String publicId,
                                                     java.lang.String systemId)
                                              throws org.xml.sax.SAXException,
                                                     java.io.IOException
        Specified by:
        resolveEntity in interface org.xml.sax.EntityResolver
        Overrides:
        resolveEntity in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
        java.io.IOException