James R Doyle created VELOCITY-880:
--------------------------------------

             Summary: DataSourceResourceLoader corrupts UTF-8 characters in 
template
                 Key: VELOCITY-880
                 URL: https://issues.apache.org/jira/browse/VELOCITY-880
             Project: Velocity
          Issue Type: Bug
    Affects Versions: 2.1.x
         Environment: Oracle12c and HSQLDB 2.3.4, JDK 1.8
            Reporter: James R Doyle


A long-withstanding bug in the DataSourceResourceLoader corrupts UTF-8 
templates retrieved from the database.  The Unit Test suite for this resource 
loader has deficiencies that hide the bug. 

The cause of the problem is this:
      InputStream rawStream = rs.getAsciiStream(templateColumn);

The resolution of the problem is simply:
      Reader r = rs.getCharacterStream(templateColumn);
      InputStream rawStream = null;
           try {
                rawStream = IOUtils.toInputStream(IOUtils.toString(r), 
encoding);
                } catch (IOException ioe) {}

Once done, the test failure vanishes:
        org.junit.ComparisonFailure: Unicode test failed.  
        Expected :The Euro Currency Symbol € is a two-byte UTF-8 character.
        Actual   :The Euro Currency Symbol ? is a two-byte UTF-8 character.

The bug was verified and the fix was tested against Oracle12c and HSQLDB 2.3.4 
using a CLOB column to store the template data.

The Unit Tests for this resource loader need attention.

Please see VELOCITY-599 ; long standing problem, which has been erroneously 
marked as resolved but has been in the codebase for a long time.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to