You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by "Andreas Veithen (JIRA)" <ji...@apache.org> on 2008/03/25 00:59:24 UTC

[jira] Updated: (SYNAPSE-212) XSLTMediator doesn't close/delete temporary files properly

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

Andreas Veithen updated SYNAPSE-212:
------------------------------------

    Priority: Minor  (was: Major)

Lowered priority from major to minor because temporary files are now deleted when the corresponding TemporaryData objects are garbage collected. This is still not optimal but should avoid resource exhaustion.

> XSLTMediator doesn't close/delete temporary files properly
> ----------------------------------------------------------
>
>                 Key: SYNAPSE-212
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-212
>             Project: Synapse
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1, NIGHTLY
>            Reporter: Andreas Veithen
>            Priority: Minor
>             Fix For: 1.2
>
>
> When a temporary file is used for the transformation result, XSLTMediator will read it back using the following instructions:
> StAXOMBuilder builder = new StAXOMBuilder(new FileInputStream(tempTargetFile));
> result = builder.getDocumentElement();
> Since Axiom constructs the XML tree on demand, this will actually not read the entire file but only a small part of it. Also, since nobody ever closes the input stream explicitly, the file will only be closed when the FileInputStream object is garbage collected.
> Immediately after the above instructions, XSLTMediator executes the following piece of code:
> boolean deleted = tempTargetFile.delete();
> if (!deleted) {
>    tempTargetFile.deleteOnExit();
> }
> Since the file is still open at that moment, on Windows platforms, the delete operation will fail. Therefore the file will not be deleted until Synapse is shut down or restarted. On Unix systems, only the directory entry will be removed, but not the inode (and the content). On these systems, the file will be deleted by the OS when the file is closed, i.e. when the FileInputStream object is garbage collected.
> This problem is not easy to solve because the input stream can't be closed inside the mediate method (the whole purpose of having a temporary file being to allow streaming). It can only be closed (and deleted) safely once the sequence containing the XSLT mediation is completed and the message has been sent. Unfortunately, there seems to be no generic mechanism in Synapse to do this. Actually what would be needed is something similar to the flowComplete method in org.apache.axis2.engine.Handler.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org