Details
Description
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.