[
https://issues.apache.org/jira/browse/CXF-1743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
R.O. updated CXF-1743:
----------------------
Description:
I have endpoint declared in Spring as follows:
---
<jaxws:endpoint id="importService"
implementor="my.ImportServiceImpl"
address="/importService">
<jaxws:properties>
<entry key="mtom-enabled" value="true" />
</jaxws:properties>
</jaxws:endpoint>
---
During tests I discovered, that large attachments (>64k), which are saved in
temporary files, are not removed after processing SOAP message.
I've analysed sources of org.apache.cxf.attachment.AttachmentDataSource and
org.apache.cxf.io.CachedOutputStream and discovered that AttachmentDataSource
does not allow to close cache.
The only solution is to add close() method to AttachmentDataSource and close
cache manually.
was:
I have endpoint declared in Spring as follows:
---
<jaxws:endpoint id="importService"
implementor="my.ImportServiceImpl"
address="/importService">
<jaxws:properties>
<entry key="mtom-enabled" value="true" />
</jaxws:properties>
</jaxws:endpoint>
---
I've analysed sources of org.apache.cxf.attachment.AttachmentDataSource and
org.apache.cxf.io.CachedOutputStream and discovered that AttachmentDataSource
does not allow to close cache.
The only solution is to add closeCache() method to AttachmentDataSource and
close cache manually.
During tests I discovered, that large attachments (>64k), which are saved in
temporary files, are not removed after processing SOAP message.
My solution (hack) of this bug:
1. add close() method to AttachmentDataSource:
/**
* The only way to clean temporary files.
*
* @throws IOException if closing cache threw an exception.
*/
public void close() throws IOException {
cache.close();
}
2. manually close LazyDataSource objects used to access uploaded attachments
using such helper method:
public static void closeDatasource(DataSource ds) {
if(ds != null && ds instanceof LazyDataSource) {
if(((LazyDataSource) ds).getDataSource() instanceof
AttachmentDataSource) {
AttachmentDataSource attDS =
(AttachmentDataSource) ((LazyDataSource) ds).getDataSource();
try {
attDS.close();
} catch (IOException e) {
// logger.error(e.getMessage(), e);
}
}
}
}
This fixes this bug in 2.1.1 and probably in 2.1.2-SNAPSHOT.
> Temporary files are not deleted
> -------------------------------
>
> Key: CXF-1743
> URL: https://issues.apache.org/jira/browse/CXF-1743
> Project: CXF
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.1.1, 2.1.2
> Environment: Linux, FreeBSD
> Reporter: R.O.
>
> I have endpoint declared in Spring as follows:
> ---
> <jaxws:endpoint id="importService"
> implementor="my.ImportServiceImpl"
> address="/importService">
> <jaxws:properties>
> <entry key="mtom-enabled" value="true" />
> </jaxws:properties>
> </jaxws:endpoint>
> ---
> During tests I discovered, that large attachments (>64k), which are saved in
> temporary files, are not removed after processing SOAP message.
> I've analysed sources of org.apache.cxf.attachment.AttachmentDataSource and
> org.apache.cxf.io.CachedOutputStream and discovered that AttachmentDataSource
> does not allow to close cache.
> The only solution is to add close() method to AttachmentDataSource and close
> cache manually.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.