DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23252>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23252 org.apache.xml.serializer.Utils throws NullPointerException ------- Additional Comments From [EMAIL PROTECTED] 2003-09-18 18:01 ------- Hi Erik, If the class name is null you will get a null pointer exception. If the class name is not null, but can't be loaded you will get a ClassNotFoundException. But when either of these happen I don't understand how one can get to the put() because an exception will be thrown. If the user specified content-handler doesn't exit then one of these would happen everytime. But what else should happen given that the custom ContentHandler cannot be loaded? I don't think it can recover. By the way, when looking into this problem I see that org.apache.xml.serializer.Utils has changed in the current CVS as the line you point to has moved. The code currently looks like this: ------------------------------------------------ static Class ClassForName(String classname) throws ClassNotFoundException { Class c; // the first time the next line runs will reference // CacheHolder, causing the class to load and create the // Hashtable. Object o = CacheHolder.cache.get(classname); if (o == null) { // class was not in the cache, so try to load it c = Class.forName(classname); // if the class is not found we will have thrown a // ClassNotFoundException on the statement above // if we get here c is not null CacheHolder.cache.put(classname, c); } else { c = (Class)o; } return c; } --------------------------------------------- The CacheHolder.cache.put(classname,c); is now on line 105, not 110 so I think your code is not the most current in CVS. If the Class.forname(classname) fails on line 105 then I don't see how we ever get to line 110 because it should throw a ClassNotFoundException and never get to the put(classname,c) with a null for c. But with the code in the current CVS, Utils.ClassForName(classname) is never called. A developer has changed some of the class loading code that used to call this method. When I edited the output_xml.properties file and changed the content-handler property to point to a non-existant class "ThisClassDoesNotExist" I got this exception traceback: java.lang.ClassNotFoundException: ThisClassDoesNotExist at java.net.URLClassLoader.findClass(URLClassLoader.java:240) at java.lang.ClassLoader.loadClass(ClassLoader.java:516) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:441) at java.lang.ClassLoader.loadClass(ClassLoader.java:448) at org.apache.xml.utils.ObjectFactory.findProviderClass (ObjectFactory.java:387) at org.apache.xml.serializer.SerializerFactory.getSerializer (SerializerFactory.java:124) at org.apache.xalan.transformer.TransformerImpl.createSerializationHandler (TransformerImpl.java:1083) at org.apache.xalan.transformer.TransformerImpl.createSerializationHandler (TransformerImpl.java:977) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1172) at org.apache.xalan.transformer.TransformerImpl.transform (TransformerImpl.java:1155) at org.apache.xalan.xslt.Process.main(Process.java:1026) So to persue this bug please upgrade your code and confirm that you get a similar traceback. Otherwise please provide more information. What behavior would you suggest? It is my presumption that you are looking for a more user friendly message as there isn't much to be done when a user specified content-handler doesn't exit, right? Regards, Brian Minchau
