On 23.09.2004 23:34:20 Finn Bock wrote:
> I think the API for adding additional element mappings to the 
> FOUserAgent is bound to cause problems when fop is deployed in a multi 
> classloader environment.
>
> Using tomcat as an example, an extension mapping deployed in a webapp 
> can not be found if a well meaning administrator has placed fop.jar in 
> tomcats common/lib directory. This is because 
> FOTreeBuilder.addElementMapping(String) uses Class.forName() to load the 
> element mapping class.
> 
> I see several possible solutions:
> 
> 1) Let FOTreeBuilder.addElementMapping() also check the
>     Thread.getContextClassLoader() for the extension element mapping.
>     This will work in environments that actually sets the context
>     classloader. Tomcat does but other environments doesn't.
> 
> 2) Pass in an explicit classloader to use when loading extension
>     mappings.
> 
> 3) Let the client pass the actual element mapping object, instead of
>     just passing in the name of the element mapping class.
> 
> I'm strongly in favor of 3) because it Just Work (tm), and when a 
> ClassNotFoundException do occur, the programmer immediately knows why 
> and how to fix it.

I agree. Actually, you can already do that in 0.20.5. Must have vanished
during refactoring.

> So I propose to change the API signature from
>      FOUserAgent.addElementMapping(String)
> to
>      FOUserAgent.addElementMapping(ElementMapping)

Keep both, please.


Jeremias Maerki

Reply via email to