Class SaxHandler
- All Implemented Interfaces:
ContentHandler,DTDHandler,EntityResolver,ErrorHandler
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 -
Method Summary
Modifier and TypeMethodDescriptionvoidcharacters(char[] ch, int start, int length) Callback-Methode für die Verarbeitung von Characters.voidEnde des Dokuments erreichtvoidendElement(String uri, String localName, String qName) Ende-Tag gefunden.voidFehlervoidSchwerer FehlerresolveEntity(String publicId, String systemId) voidsetConnection(de.bsvrz.dav.daf.main.ClientDavInterface cdi) Die DaV-Verbindung der Applikation im SAX-Handler eintragenvoidDen Datengenerator im SAX-Handler eintragenvoidsetDataModel(de.bsvrz.dav.daf.main.config.DataModel dm) Das Datenmodell der Applikation im SAX-Handler eintragenvoidsetIsInVerify(boolean iiv) Festlegen, ob sich der Parser in der Verifizierung befindetvoidsetRequestedObjects(List objects) Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragenvoidSende-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)voidsetTimeStampOption(int tso) Option für den Zeitstempel setzen: Entweder werden die Daten mit den originalen Zeitstempeln wieder eingespielt oder in die Jetztzeit verschobenvoidskippedEntity(String name) voidCallback-Methode für Start des XML-DokumentsvoidstartElement(String uri, String localName, String qName, Attributes attributes) Start-Tag gefunden.voidWarnungMethods inherited from class org.xml.sax.helpers.DefaultHandler
endPrefixMapping, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, startPrefixMapping, unparsedEntityDeclMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.xml.sax.ContentHandler
declaration
-
Constructor Details
-
SaxHandler
public SaxHandler()Creates a new instance of SaxHandler
-
-
Method Details
-
characters
Callback-Methode für die Verarbeitung von Characters.- Specified by:
charactersin interfaceContentHandler- Overrides:
charactersin classDefaultHandler- Parameters:
ch- Feld mit den erparstencharsstart- Startpositionlength- Länge des Feldes- Throws:
SAXException- bei Problemen
-
endDocument
Ende des Dokuments erreicht- Specified by:
endDocumentin interfaceContentHandler- Overrides:
endDocumentin classDefaultHandler- Throws:
SAXException- bei Problemen
-
endElement
Ende-Tag gefunden.- Specified by:
endElementin interfaceContentHandler- Overrides:
endElementin classDefaultHandler- Parameters:
uri- URI des TagslocalName- BezeichnerqName- Qualifizierter Name- Throws:
SAXException- bei Problemen
-
error
Fehler- Specified by:
errorin interfaceErrorHandler- Overrides:
errorin classDefaultHandler- Parameters:
e- Den Fehler auslösende Exception- Throws:
SAXException- bei Problemen
-
fatalError
Schwerer Fehler- Specified by:
fatalErrorin interfaceErrorHandler- Overrides:
fatalErrorin classDefaultHandler- Parameters:
e- Den fatalen Fehler auslösende Exception- Throws:
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
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
Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragen- Parameters:
objects- Die gewünschten Objekte
-
setSendQueue
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
- Specified by:
skippedEntityin interfaceContentHandler- Overrides:
skippedEntityin classDefaultHandler- Throws:
SAXException
-
startDocument
Callback-Methode für Start des XML-Dokuments- Specified by:
startDocumentin interfaceContentHandler- Overrides:
startDocumentin classDefaultHandler- Throws:
SAXException- bei Problemen
-
startElement
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException Start-Tag gefunden.- Specified by:
startElementin interfaceContentHandler- Overrides:
startElementin classDefaultHandler- Parameters:
uri- URI des TagslocalName- BezeichnerqName- Qualifizierter Nameattributes- Liste der Attribute des Tags- Throws:
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
Warnung- Specified by:
warningin interfaceErrorHandler- Overrides:
warningin classDefaultHandler- Parameters:
e- Die Warnung auslösende Exception- Throws:
SAXException- bei Problemen
-
resolveEntity
- Specified by:
resolveEntityin interfaceEntityResolver- Overrides:
resolveEntityin classDefaultHandler- Throws:
SAXExceptionIOException
-