DOM guide: Error handling

From COLLADA Public Wiki
Jump to: navigation, search

The COLLADA DOM provides an interface, daeErrorHandler, that handles the printing of error messages. It allows a client application to be notified when the COLLADA DOM encounters an internal error.

Overview

The daeErrorHandler is an abstract singleton class. That is, the functionality must be implemented in a subclass (abstract) but only one instance of any subclass will be active and available (singleton) through the daeErrorHandler interface.

The COLLADA DOM provides a default daeErrorHandler implementation, daeStdErrPlugin. The daeStdErrPlugin class implements daeErrorHandler and routes string error messages to the C standard error stream.

Creating Your Own Error Handler

It may be desirable to route error messages for special handling or because the C standard error stream is unavailable, such as in GUI programs. You can create your own error-handling code by implementing a class that inherits from daeErrorHandler.

The daeErrorHandler interface declares two functions that need to be implemented to handle messages:

  • handleError( daeString );
  • handleWarning( daeString );

Implement these functions to parse or route the messages in whatever way you want. An example would be to create a pop-up window with the error message.

After implementing your error-handling class, you must pass an object of your class to the daeErrorHandler class to notify the DOM to use it for error handling. Use the daeErrorHandler::setErrorHandler method to do this. For example:

DAE *daeObject = new DAE();
myErrorHandlerClass *myEH = new myErrorHandlerClass();
daeErrorHandler::setErrorHandler( myEH );
daeObject->load( myFileToLoad );
...
delete daeObject;
delete myEH;

Note that the daeErrorHandler does not destroy or free any memory used by custom error handlers. You are responsible for destroying the error handler yourself.

Sending Error Messages to daeErrorHandler

A client application is free to call the daeErrorHandler code to route its error messages. To send a message, get a pointer to the active error handler by calling daeErrorHandler::get. You can then call the appropriate error-handling method. For example:

daeErrorHandler::get()->handleError( "The data you are loading is broken. Go fix it and try again!" );

The daeErrorHandler::get method always returns a valid error handler, so there's no need to check the return value for NULL.


COLLADA DOM - Version 2.4 Historical Reference
List of main articles under the DOM portal.
User Guide chapters:  • Intro  • Architecture  • Setting up  • Working with documents  • Creating docs  • Importing docs  • Representing elements  • Working with elements  • Resolving URIs  • Resolving SIDs  • Using custom COLLADA data  • Integration templates  • Error handling

Systems:  • URI resolver  • Meta  • Load/save flow  • Runtime database  • Memory • StringRef  • Code generator
Additional information:  • What's new  • Backward compatibility  • Future work
Terminology categories:  • COLLADA  • DOM  • XML