[XML-SIG] dtd error handling

Harry Varnis hgv@nsg0.network.com
Thu, 08 Apr 1999 12:24:02 -0500


Sorry if this isn't an appropriate forum for this, but here goes...

I can't seem to get my ErrorHandler to be used for dtd errors. I'm
using SAX + validating xmlproc. My ErrorHandler gets xml document
errors OK, but for dtd errors, the methods of xmlproc's default
Application get used.

I've tried to sort through the module code (xml-0.5) but I quickly got
tangled up :-) Can anyone help, please?

Thanks,
Harry Varnis

Here is a traceback and some code snippets:

Traceback (innermost last):
  File "/usr/local/apache/fastcgi-bin/serviceapp.py", line 236, in ?
    app.load(path)
  File "/usr/local/apache/fastcgi-bin/serviceapp.py", line 75, in load
    self.servicedata = servicedataparse.fromFile(f)
  File "/home/hgv/SSM/servicedataparse.py", line 103, in fromFile
    p.parseFile(file)
  File "/usr/lib/python1.5/site-packages/xml/sax/drivers/drv_xmlproc.py", line 2
9, in parseFile
    self.parser.read_from(file)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlval.py", line 12
0, in read_from
    self.parser.read_from(file)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlutils.py", line
143, in read_from
    self.feed(buf)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlutils.py", line
189, in feed
    self.do_parse()
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlproc.py", line 2
88, in do_parse
    self.parse_doctype()
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlproc.py", line 6
57, in parse_doctype
    self.app.handle_doctype(rootname,pub_id,sys_id)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlval.py", line 28
8, in handle_doctype
    p.parse_resource(sys_id)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlutils.py", line
71, in parse_resource
    self.report_error(3000,sysID)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlutils.py", line
374, in report_error
    self.err.fatal(msg)
  File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmlapp.py", line 13
4, in fatal
    sys.exit(1)
SystemExit: 1
            
class ServiceDataDocumentHandler(saxlib.HandlerBase):
    def __init__(self):
        saxlib.HandlerBase.__init__(self)
        self.serviceData = None

    def startElement(self, name, attrs):
        .
        .

    def endElement(self, name):
        .
        .

    def characters(self, ch, start, length):
        .
        .

    def error(self, exception):
        message = "Recoverable error: %s" % str(exception)
        .
        .

    def fatalError(self, exception):
        message = "Non-recoverable error: %s" % str(exception)
        .
        .
        raise exception

    def warning(self, exception):
        message = "Warning: %s" % str(exception)
        .
        .

def fromFile(file):
    p = saxexts.XMLValParserFactory.make_parser()
    h = ServiceDataDocumentHandler()
    p.setDocumentHandler(h)
    p.setErrorHandler(h)
    p.setDTDHandler(h)
    p.parseFile(file)
    p.close()
    return h.serviceData