Bond - James D. wrote:

Been using XMLConfiguration now for a bit .... it works great. BUT when I try to use it with an xml file that references a relative dtd (like 'my.dtd') It yells: org.apache.commons.configuration.ConfigurationException: Relative URI "my.dtd"; can not be resolved without a base URI.

So I have 2 questions:

1) I have been able to just use the relative DTD for every other XML parser I've used ... why does only this one require a full path to the DTD? (which is not possible for me since I can deploy this app anywhere).

2) If it 'just plain requires the full path', then fine, let me turn of DTD validation. How the heck do I do that with the Commons Configuration package? I've used the Digester classes before and with them I just have to do something like: digester.setValidating( false ); How do I turn off DTD validation???

Thanks.

XMLConfiguration loads XML files through an InputSource, which is merely a wrapper around a stream and does not allow the XML parser to obtain the path of the XML document. So relative paths cannot be resolved.

DTD validation is disabled per default. However even non validating XML parsers will always try to load a specified DTD because it might contain other important information like entity definitions. So if the DTD canot be found, an exception will be thrown by the parser.

To work around this problem: In the nightly builds XMLConfiguration contains a new method setDocumentBuilder(). This method allows to set a pre-configured XML parser, which will then be used to load documents. You can create your own DocumentBuilder and register a custom EntityResolver implementation, which locates your DTD file (or returns null if the DTD really is not important). Then pass this DocumentBuilder to the setDocumentBuilder() method before you call load().

HTH
Oliver

Thanks for the response, but I still don't see why a dtd file that is in the same directory as an xml file REQUIRES a full path to it? This has never been an issue with any other code I've used to read XMLs. Any reference material you can point to regarding writing my own 'DocumentBuilder' (still not sure if that's an option because I'll have to use stable code for my project, not a nightly build)? Like I said in my original post, it'd be nice if the existing code supported a 'setValidation(boolean)' method like the Digester does (it uses a referenced dtd file just fine).
I committed a fix (thanks to Simon Kitching for his tip), which solves the problem. A relative path to a DTD will now be resolved correctly.

Oliver

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

Reply via email to