Andreas Veithen created AXIOM-468:
-------------------------------------

             Summary: StAXUtils may cause class loader leak
                 Key: AXIOM-468
                 URL: https://issues.apache.org/jira/browse/AXIOM-468
             Project: Axiom
          Issue Type: Bug
          Components: API
    Affects Versions: 1.2.15
            Reporter: Andreas Veithen
            Priority: Minor


By default, StAXUtils keep per class loader maps of XMLInputFactory and 
XMLOutputFactory instances (where the key is the thread context class loader). 
These maps are implemented as WeakHashMap<ClassLoader,XMLInputFactory> and 
WeakHashMap<ClassLoader,XMLOutputFactory>. This may cause a class loader leak 
if the XMLInputFactory or XMLOutputFactory instance has a strong reference to 
the ClassLoader used as key. That case occurs in two scenarios:

1. A StAX implementation is loaded by a class loader that is not the class 
loader that loads StAXUtils or one of its parent class loaders, and that class 
loader is set as the context class loader when StAXUtils is used. Note that 
this is basically the use case for which the per class loader maps were 
designed.

2. For whatever reason, the XMLInputFactory/XMLOutputFactory instance keeps a 
strong reference to the thread context class loader set when the instance was 
created. In that scenario, if StAXUtils is used with a thread context class 
loader that is set to any class loader other than the one that loaded StAXUtils 
or one of its parents, then StAXUtils will prevent that class loader from being 
garbage collected. This type of behavior has been reported for the default StAX 
implementation in the Oracle JRE (see 
http://markmail.org/message/2kfstgjckrgiimmt). Woodstox is probably not 
affected.

The scenario for which the per class loader feature was designed is probably 
very rare. As shown above, that scenario is always prone to class loader leaks. 
Therefore this feature should probably be removed without replacement, and 
StAXUtils should always load the StAX implementation visible to its own class 
loader. Note that this mode is already supported, but it is not the default.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ws.apache.org
For additional commands, e-mail: dev-h...@ws.apache.org

Reply via email to