[ 
https://issues.apache.org/jira/browse/XALANJ-2600?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Samuel Brezáni updated XALANJ-2600:
-----------------------------------
    Attachment: xalan_memory_leak.jpg

> Memory leak in TransformerIdentityImpl
> --------------------------------------
>
>                 Key: XALANJ-2600
>                 URL: https://issues.apache.org/jira/browse/XALANJ-2600
>             Project: XalanJ2
>          Issue Type: Bug
>      Security Level: No security risk; visible to anyone(Ordinary problems in 
> Xalan projects.  Anybody can view the issue.) 
>          Components: Xalan
>    Affects Versions: 2.7.2
>            Reporter: Samuel Brezáni
>            Assignee: Steven J. Hathaway
>         Attachments: TransformerIdentityImpl.java.patch, xalan_memory_leak.jpg
>
>
> Hi.
> I found a serious memory leak in the Xalan library. It is caused by the 
> org.apache.xalan.transformer.TransformerIdentityImpl class.
> I try to explain mechanism how the memory leak is caused:
> Web application is deployed on SAP NetWeaver AS with Java 1.6 (1.6.0_95). The 
> application uses Spring WS library but also another libraries with dependency 
> to Xalan library.
> When the web service is invoked, then the TransformerIdentityImpl class is 
> used. This class is used because it's extends javax.xml.transform.Transformer 
> and it is created by Java core method - 
> javax.xml.transform.TransformerFactory.newInstance().
> A class com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory is used for 
> handling web services. This object also contains cache (ParserPool) with 
> SAXParser objects (com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl). As 
> key for this cache is used an application class loader.
> EnvelopeFactory object and SAXParserImpl objects are loaded by a system class 
> loader, but TransformerIdentityImpl class is loaded by an application class 
> loader.
> During handling of web service a method 
> org.apache.xalan.transformer.TransformerIdentityImpl.transform(Source, 
> Result) is invoked. This method uses SAXParser as a reader. Problem is that 
> this method register self for handling properties (eg: 
> "http://xml.org/sax/handlers/DeclHandler";) but after processing method 
> doesn't unregister self from SAXParser. It means that objects loaded by the 
> system class loaded has dependencies on objects loaded by the application 
> class loader.
> Objects are still loaded after application is undeployed because cached 
> SAXParser references TransformerIdentityImpl.
> I prepared very simple patch to fix this problem. In the attachment is also 
> picture which demonstrates situation.



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

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

Reply via email to