Change ResourceLoader API to return Reader instances instead of InputStreams
----------------------------------------------------------------------------

                 Key: VELOCITY-714
                 URL: https://issues.apache.org/jira/browse/VELOCITY-714
             Project: Velocity
          Issue Type: Improvement
          Components: Engine
            Reporter: Jarkko Viinamäki


Abstract class org.apache.velocity.runtime.resource.loader.ResourceLoader 
contains method

    public abstract InputStream getResourceStream( String source )
        throws ResourceNotFoundException;

However, in org.apache.velocity.Template.process() there is code (abbreviated):

        try
        {
            is = resourceLoader.getResourceStream(name);
        }
        catch( ResourceNotFoundException rnfe )
        {
            errorCondition = rnfe;
            throw rnfe;
        }

        if (is != null)
        {
            try
            {
                BufferedReader br = new BufferedReader( new InputStreamReader( 
is, encoding ) );
                data = rsvc.parse( br, name);
...

This seems a bit silly. ResourceLoaders should obviously return Reader 
instances since those would allow loaders to take content encoding into 
account. Currently this is problematic especially with DataSourceResourceLoader 
(VELOCITY-599). If we want to support UTF-8 in DataSourceResourceLoader, with 
current API we would first have to use ResultSet.getCharacterStream to get a 
Reader, then read all stuff into a String, then convert it into UTF-8 encoding 
with getBytes call but then in the Template the whole stuff is then converted 
back to a Reader. That's a lot of waste.

I think it would make more sense if the ResourceLoader API contained a method:

    public abstract Reader getResource( String source )
        throws ResourceNotFoundException;




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to