- From: Andrew Clover <and-w3@doxdesk.com>
- Date: Wed, 24 Dec 2003 10:09:25 +0000
- To: www-dom@w3.org
Philippe Le Hegaret <plh@w3.org> wrote: > FYI, I updated the issues list Thanks. In addition to my previous comments on Core, I have further concerns with LS's approach to error handling in particular. Recently there has been some discussion on the DOMTS list regarding the correct behaviour of LSParser parsing methods in the face of an uncontinuable DOMError. The current position of the LS tests in TS is that null should be returned. This is not clearly stated in the text of the spec (where null values are mentioned only in relation to asynchronous parsers), and current imps don't actually do it, but it is consistent with the behaviour of LSSerializers, which simply return boolean-false when write() is confronted with an error. Having recently updated my own LS implementation to conform to this expectation, I am finding the results highly undesirable, and would like to see not only LSParser's definition clarified, but also LSSerializer's altered. The problem is mainly the (reasonable?) user expectation that any error condition not explicitly checked for should throw an exception back. Errors that are silently suppressed result in unpleasant debugging, as the root cause of the problem is buried and the warning signs only appear later (eg. as a null pointer dereference on the return value of parse(), or a file containing a corrupted partial XML byteStream or nothing at all). To get around the problem is not massively difficult, but non-obvious to a naive DOM user, and tedious to write, for example in pseudo-code: class ErrorHandlerInnerClass method handle(DOMError e) outerClassInstance.storedException= e.relatedException return false method readDocument LSParser p= implementation.createLSParser(1, null) p.config.setParameter('error-handler', ErrorHandlerInnerClass instance) storedException= null if p.parseURI(some document)==null if storedException==null raise UnspecifiedDOMError else raise storedException All this just to get the 'normal' expected exception behaviour. Compared to existing DOM implementations' one-liner parsing methods, this is a big lose. I would suggest that in cases where errors in a synchronous LSParser cannot be recovered from (including the case when there is no error-handler set on the DOMConfiguration), a defined exception of some sort should be thrown. [...For example DOMError iself could be made throwable. This would have the advantage of being able to wrap an implementation-specific exception (in the relatedException property) without having to add these to the LSParser/ LSSerializer interface. It could also wrap exceptions thrown when calling a LSParserFilter or LSSerializer method, solving the previously-raised issue of what effect that would have.] Finally, on a not-entirely-related note, it would be useful if the stringData of a DOMInput being the empty string were valid. It is conceivably useful to parse an empty string in a parseWithContext operation. -- Andrew Clover mailto:and@doxdesk.com http://www.doxdesk.com/
Received on Wednesday, 24 December 2003 05:28:47 UTC