Will Sappington wrote:
Hello all,
I’m writing a configuration utility that we call an “application
profile” or simply profile, that is essentially an ini file on
steroids. It’s a hierarchical structure – application/section/item –
that allows multiple applications to use a single profile. I’m
migrating it from “key = value” format to XML and I’m using Xalan/Xerces
for evaluating XPath expressions to retrieve the configuration items.
...
XalanDocumentPrefixResolver thePrefixResolver(_pXmlDoc);
where _pXmlDoc is in the Profile class private member data
From looking at your code, I suspect the _pXmlDoc data member is pointing
to an instance that's already been destroyed.
Here's what the comments for XMLParserLiason::parseXMLStream() say:
/**
* Parse the text pointed at by the reader as XML, and return a DOM
* Document interface. It is recommended that you pass in some sort of
* recognizable name, such as the filename or URI, with which the reader
* can be recognized if the parse fails.
*
* The liaison owns the XalanDocument instance, and will delete it when
* when asked (see DestroyDocument()), or when the liaison is reset, or
* goes out of scope.
*/
So, the instance you created is destroyed when the
XalanSourceTreeParserLiaison instance is destroyed in Profile::_openXmlDoc().
In general, Xalan-C implements very tightly controlled ownership of
objects. The easiest way for you to handle this is to make the
XalanSourceTreeParserLiason instance a member of your class.
Dave