"Magali & Edouard sur Free" <[EMAIL PROTECTED]> writes:
> As I understand, the Java XSLT API performs introspection by creating an > instance of the 'javax.xml.transform.TransformerFactory' abstract class, and > by looking at the Java system 'javax.xml.transform.TransformerFactory' > property. > > My question is: how to make all this work? > > A piece of answer would be: how to force the underlying class loader of the > Ant 'typedef' task to load the whole content of a jar (even those that may > be used by introspection), instead of just loading the classes declared and > discovered at compile time? > > I really need to separate my XSLT implementation and my task from Ant 'lib' > directory! The problem is not that the whole content of the jar is loaded (it is !) - but that classes present in JRE rt.jar are not able to find the resource META-INF/services/javax.xml.transform.TransformerFactory in its only visible ClassLoader: the system ClassLoader. You may want to read javax.xml.transform.TransformerFactory.newInstance() to know more about the factory loading. The only work-around I see is to short-circuit the API when you call the TransformerFactory in your Ant task with the following code: . is = YourTask.class.getClassLoader() .getResourceAsStream("META-INF/services/javax.xml.transform.TransformerFactory") . Read the Class name from the InputStream . Load the corresponding Class object from YourTask.class.getClassLoader() . Do a Class.newInstance() => result is a javax.xml.transform.TransformerFactory . Call newTransformer on that Factory That way, you load the correct implementation class name from the Ant typedef ClassLoader and use directly the javax.xml.transform factory ! Warning: I do not test the code myself. I'm interested to know if you succeeded. Hope this helps Regards -- Yves Martin --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]