"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]

Reply via email to