Class SaxHandler
- java.lang.Object
-
- org.xml.sax.helpers.DefaultHandler
-
- de.bsvrz.pat.datgen.generator.xmlParser.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 MethodedatenVerarbeiten
wohl einen rekursiven Aufbau (vglDataGenerator.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 einesData
lediglich eine "flacher" Datenstruktur erzeugt, in die wiederumData
s für die NonPlains eingesetzt werden, die wiederumData
s für NonPlains enthalten können usw.Die o. g. zunächst erzeugte flache Datenstruktur ist
data
. Jedes weitere für NonPlains erzeugteData
wird auf einen Stack gelegt. DurchreadTop()
wird nun erreicht, daß beim Einlesen eines Attributs immer dasData
-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 diesesData
-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
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 erreichtvoid
endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName)
Ende-Tag gefunden.void
error(org.xml.sax.SAXParseException e)
Fehlervoid
fatalError(org.xml.sax.SAXParseException e)
Schwerer Fehlerorg.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 eintragenvoid
setDataGenerator(DataGenerator dg)
Den Datengenerator im SAX-Handler eintragenvoid
setDataModel(de.bsvrz.dav.daf.main.config.DataModel dm)
Das Datenmodell der Applikation im SAX-Handler eintragenvoid
setIsInVerify(boolean iiv)
Festlegen, ob sich der Parser in der Verifizierung befindetvoid
setRequestedObjects(java.util.List objects)
Die angeforderten Datenobjekte der Applikation im SAX-Handler eintragenvoid
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 verschobenvoid
skippedEntity(java.lang.String name)
void
startDocument()
Callback-Methode für Start des XML-Dokumentsvoid
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
-
-
-
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 interfaceorg.xml.sax.ContentHandler
- Overrides:
characters
in classorg.xml.sax.helpers.DefaultHandler
- Parameters:
ch
- Feld mit den erparstenchar
sstart
- Startpositionlength
- 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 interfaceorg.xml.sax.ContentHandler
- Overrides:
endDocument
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
endElement
in classorg.xml.sax.helpers.DefaultHandler
- Parameters:
uri
- URI des TagslocalName
- BezeichnerqName
- 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 interfaceorg.xml.sax.ErrorHandler
- Overrides:
error
in classorg.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 interfaceorg.xml.sax.ErrorHandler
- Overrides:
fatalError
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
skippedEntity
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
startDocument
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
startElement
in classorg.xml.sax.helpers.DefaultHandler
- Parameters:
uri
- URI des TagslocalName
- BezeichnerqName
- Qualifizierter Nameattributes
- 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 interfaceorg.xml.sax.ErrorHandler
- Overrides:
warning
in classorg.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 interfaceorg.xml.sax.EntityResolver
- Overrides:
resolveEntity
in classorg.xml.sax.helpers.DefaultHandler
- Throws:
org.xml.sax.SAXException
java.io.IOException
-
-