[ 
https://issues.apache.org/jira/browse/XALANJ-2600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15295358#comment-15295358
 ] 

Gary Gregory commented on XALANJ-2600:
--------------------------------------

Patch applied, thank you.

build smoketest OK
build smoketest.xsltc OK
build smoketest.dev OK

{noformat}
commit -m "[XALANJ-2600] Memory leak in TransformerIdentityImpl. " -N 
E:/vcs/svn/apache/xalan-j/branches/xalan-j_2_7_1_maint/java/src/org/apache/xalan/transformer/TransformerIdentityImpl.java
    Sending        
E:/vcs/svn/apache/xalan-j/branches/xalan-j_2_7_1_maint/java/src/org/apache/xalan/transformer/TransformerIdentityImpl.java
    Transmitting file data ...
    Committed revision 1745007.
{noformat}



> 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: Gary Gregory
>             Fix For: 2.7.3
>
>         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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to