proposed fix to ClassCastException in org.apache.xml.res.XMLMessages
--------------------------------------------------------------------
Key: XALANJ-1993
URL: http://nagoya.apache.org/jira/browse/XALANJ-1993
Project: XalanJ2
Type: Bug
Environment: ibm jdk 1.3 and 1.4
Reporter: Carlo Marchiori
IBM jdks do not implements correctly the contract of the method
java.util.ResourceBundle.getBundle (). In fact they search for a property file
implementation of the bundle before the list implementation.
The result is that a ClassCastException happens in the class
org.apache.xml.res.XMLMessages, specifically in the method
-------------------------------------
public static ListResourceBundle loadResourceBundle(String className)
throws MissingResourceException
{
Locale locale = Locale.getDefault();
try
{
return (ListResourceBundle)ResourceBundle.getBundle(className, locale);
-------------------------------------
I propose that xalan recognises this problem and so adopts a workaround in the
source tree. My workaround first checks if the bundle loaded is a
ListResourceBundle; if not it wraps it with an adapter.
-----------------------------------------------------------------
//return (ListResourceBundle)ResourceBundle.getBundle(className,
locale);
ResourceBundle bundle = ResourceBundle.getBundle(className, locale);
if (bundle instanceof PropertyResourceBundle)
{
return new ListResourceBundleAdapter (bundle);
}
else
{
return (ListResourceBundle) bundle;
}
----------------------------------------------------------------------
My adapter implementation is
--------------------------------------------------------------------------
public class ListResourceBundleAdapter extends ListResourceBundle
{
Object [][] contents;
public ListResourceBundleAdapter (ResourceBundle bundle)
{
Enumeration keys = bundle.getKeys();
LinkedList list = new LinkedList ();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
Object value = bundle.getObject(key);
Object [] pair = new Object [] {key, value};
list.add(pair);
}
contents = (Object [][]) list.toArray(new Object [list.size()]
[]);
}
/* (non-Javadoc)
* @see java.util.ListResourceBundle#getContents()
*/
protected Object[][] getContents()
{
return contents;
}
}
--------------------------------------------------------------------------
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]