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]