Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Ws Wiki" for change 
notification.

The following page has been changed by GeoffWinn:
http://wiki.apache.org/ws/Tuscany/TuscanyCpp/DesignNotes

------------------------------------------------------------------------------
  
  = Debugging the XML parser =
  
- SDO uses the SAX parser provided by libxml2 to parse XML documents (and 
therefore XSD documents also). The SAX parser uses a callback mechanism to 
report XML events to its caller. These callback routines are supplied to the 
parser using a struct of type xmlSAXHandler, called SDOSAX2``Handler that is 
defined in SAX2``Parser.cpp
+ SDO uses the SAX parser provided by libxml2 (http://xmlsoft.org/index.html) 
to parse XML documents (and therefore XSD documents also). The SAX parser uses 
a callback mechanism to report XML events to its caller. These callback 
routines are supplied to the parser using a struct of type xmlSAXHandler, 
called SDOSAX2``Handler that is defined in SAX2``Parser.cpp. However, since 
libxml2 is written in C and operates with no knowledge of objects or classes, 
it is necessary to bridge the gap between libxml2's C-style call back mechanism 
and the objects that comprise SDO. This is done as follows.
+ 
+ The file SAX2``Parser.cpp defines (C style) functions for all the callback 
routines required by libxml2. Looking through that file, it is clear that many 
of those functions, such as sdo_internalSubset(), are empty, meaning that SDO 
will simply ignore that particular event if it is reported by libxml2. Where a 
callback function is not empty, the active contents usually take the form of a 
call such as
+ 
+ (SAX2``Parser*) ctx)->startDocument()
+ 
+ This call is forwarding the event reported by libxml2 to a method within a 
parser object created by SDO.
+ 
+ To understand this, we have to step back a little. A client of libxml2 
initiates the parse of an XML instance by calling the xmlSAXUserParseFile 
function. This function takes three parameters. The first is the struct 
containing the list of callback functions (ie SDOSAX2``Handler) and the third 
is the name of the XML file to parse. The second parameter is of type 
'''void*''' and is not used by libxml2 directly. However, it is passed to every 
callback functon that libxml2 calls as part of this parse to spply them with 
whatever context information it represents. In Tucant SDO that context is in 
fact a pointer to an object that implements the appropriate parsing of the file.
  
  To watch the parsing of a file as it unfolds it is usually easiest to place 
breakpoints on the routines named in that struct.
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to