On 29 Mar 2004, at 18:52, Craig McClanahan wrote:Paul Libbrecht wrote:
I think Digester.parse(java.io.File) should do it for me, or?In theory it should ... but if it doesn't, you can easily construct a URL for a file and use the technique I described.
(this method does build an input-source with correct URL, btw)
There's even, in the maven code, efforts towards making this an absolute path.
But the problem remains: if you look at the code of Digester.java, there's nothing that keeps the URL of the file! And the call to the method configure() is without any parameter!But that's a feature, not a bug :-). No code in Digester is necessary, because it's all handled by the SAX parser underneath.
I do think, contrary to what Robert claims, that XML-compliance requires relative-system-id-entities to be resolved completely as long as we have a URL.Correct relative entity resolution also requires users to correctly utilize what the JAXP APIs provide. If you don't provide an absolute URL for the document being parsed, relative URL references will fail. If you do provide an absolute URL, entity references will work in a manner totally transparent to Digester, because this is a feature built in to the underlying SAX based parser.
'../whatever.dtd' is not an url. XML parsers can therefore reject it and still be specification compliant. (the url should be something like 'file:../whatever.dtd'.) digester makes an attempt to resolve the url in the standard java way which is more than the xml specification requires in this case.
i should probably admit my mistake before others pick it up. relative urls do not need a scheme prefix but an entity resolver cannot know the base protocol. this is probably why the SAX specification says that only fully resolved URLs should be passed in (i take this to mean absolute URLs).
IMO the only safe way for digester to deal with relative URLs is to return null and leave the parser to try to sort out the mess. the only issue would be sort out the relative URLs from badly formed absolute file URLs such as 'C:\whatever.dtd'. i don't think that returning null in the case of a badly formed URL should make much difference (most parsers should find the file in question) but i suppose digester could test for the existing of a file (if people think that this is a serious problem).
- robert
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
