You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by Kirk Wolf <ki...@mastercard.com> on 2003/02/27 15:27:41 UTC

Velocity 1.3.1 RuntimeInstance.setDefaultProperties() bug

Hello,
I've found that there is a bug in the RuntimeInstance setDefaultProperties
method that prevents Velocity 1.3.1 from running on an IBM mainframe.

The code is currently written:

         InputStream inputStream = classLoader
                .getResourceAsStream( DEFAULT_RUNTIME_PROPERTIES );

            configuration.load( inputStream );

Which loads the default runtime properties into an ExtendedProperties
object.
This fails on an OS/390 which has a default codepage of Cp1047 (ebcdic),
since:

1) the properties resource is packaged in the Jar in codepage ISO8859_1.
2) The ExtendedProperties class attempts to load it using the default
codepage (Cp1047).
3) Because of the codepage mismatch, the resulting ExtendedProperties
object is empty and you get the error:
"It appears that no class was specified as the ResourceManager.  Please
ensure that all configuration information is correct."

Note that java.util.Properties.load(InputStream) ALWAYS loads using
"8859_1", since properties files are assumed to be in ASCII.


A workaround to this bug is to load the default properties manually, add
your changes and pass them all to the  VelocityEngine.init(Properties)
method.

The fix is to change the line to:

                  configuration.load( inputStream, "8859_1" );

Which is consistent with java.util.Properties.load().  Also, any other uses
of the ExtendedProperties.load() should be changed as well.   In fact,
ExtendedProperties.load() should probably default to "8859_1", IMO.

Kirk Wolf




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