commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig McClanahan (JIRA)" <>
Subject [jira] Commented: (VALIDATOR-209) Additional constructor for ValidatorResources that takes URL[] instead of String[]
Date Thu, 23 Nov 2006 04:36:03 GMT
    [ ] 
Craig McClanahan commented on VALIDATOR-209:

The patch looks OK to me, but with one comment ... it makes me uncomfortable to have code
that opens a stream without explicitly closing it.  Even though it apparently works in the
case of a resource embedded in a JAR file (such as the registered DTDs inside Digester), I'd
feel better if we did the close ourselves ... so the constructor that takes a URL might be
coded like this:

        Digester digester = initDigester();
        InputStream stream = null;
        try {
            stream = url.openStream();
            InputSource source = new InputSource(url.toExternalForm());
        } finally {
            if (stream != null) {
                try { stream.close() } catch (IOException e) { }

instead.  I'm going to make the same recommendation to Simon on the uses of this pattern inside
Digester, too (although that could get a little painful in some cases).  Can you tell I've
been getting bit by locked Commons JAR files on Windows a lot lately?  :-)

> Additional constructor for ValidatorResources that takes URL[] instead of String[]
> ----------------------------------------------------------------------------------
>                 Key: VALIDATOR-209
>                 URL:
>             Project: Commons Validator
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: 1.3.0 Release
>            Reporter: Craig McClanahan
>            Priority: Minor
>         Attachments: validator-209-ValidatorResources.patch
> Currently, the constructor for ValidatorResources takes an InputStream, and array of
InputStream, a single String, or an array of Strings (in the latter two cases, the strings
are assumed to be URIs of either webapp resources or classpath resources to be parsed).  In
a web application environment, a framework or application using Commons Validator will typically
use either ServletContext.getResource() or Class.getResource() to find URLs of the set of
resources to be configured.
> However, the CommonsValidator constructor cannot take URLs correctly.  Therefore, the
caller will need to convert these URLs to external (String) form in order to pass them in.
 However, these Strings will ultimately need to be turned back into URLs anyway (inside the
Digester instance being used), in order for relative references to work.
> Thus, the current implementation assumes that there is a lossless conversion from a URL
returned by ServletContext.getResource() or Class.getResource(), to a String, and then back
to a URL.  That assumption is *not* necessarily guaranteed for the servlet context resources
(although it is generally the case in practice for most containers).  It is legal for the
container to embed information (such as a custom URLStreamHandler implementation) inside the
URLs it returns for webapp resources.
> It would be better defensive coding for ValidatorResources to accept an array of URLs
of the resources to be loaded (and pass them directly in to Digester unchanged), in addition
to the other constructors that are currently supported.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message