Hi Christian, On Wed, 2006-03-01 at 11:15 +0100, Christian Thalinger wrote: > The problem is around ResourceBundle.java:480, or better, at > Class.java:1136. As you can see, the class contructor throws a NPE, but > ResourceBundle.tryBundle does only catch IllegalAccessException, > InstantiationException and ClassNotFoundException. > > The jikes rvm, which is the only classpath based JVM that can run dacapo > xalan, has this code for Class.newInstance: > > // Run the default constructor on the it. > try { > VM_Reflection.invoke(defaultConstructor, obj, null); > } catch (Throwable e) { > InstantiationException ex = new InstantiationException(); > ex.initCause(e); > throw ex; > } > > So, every exception in the contructor is converted into an > InstantiationException, which obviously is caught in > ResourceBundle.tryBundle. Aha. Now I understand the mauve test that Tom added for Class.newInstance(). I don't have a working jikesrvm here, but jikesrvm will fail this new test since it doesn't rethrow the exception from the constructor invocation. (This might be our poor documentation, we should clearly mention that we get an InvocationTargetException, then we unwrap it and rethrow the original exception from the constructor.) > I think we should handle that properly in GNU Classpath, as all VMs > would have the same code here. Looks like we should catch any exception thrown by the class constructor in tryBundle() and treat it as if the initialization failed for that ResourceBundle so we try the next one. Does the dacapo xalan work for you with the following patch? diff -u -r1.36 ResourceBundle.java --- java/util/ResourceBundle.java 23 Oct 2005 17:04:46 -0000 1.36 +++ java/util/ResourceBundle.java 1 Mar 2006 10:59:59 -0000 @@ -476,9 +476,7 @@ if (ResourceBundle.class.isAssignableFrom(rbClass)) bundle = (ResourceBundle) rbClass.newInstance(); } - catch (IllegalAccessException ex) {} - catch (InstantiationException ex) {} - catch (ClassNotFoundException ex) {} + catch (Throwable t) { /* Class initialization failed, no valid bundle. */ } if (bundle == null) { Cheers, Mark -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part Url : http://developer.classpath.org/pipermail/classpath/attachments/20060301/efadd36c/attachment-0001.pgp