[ https://issues.apache.org/jira/browse/CAMEL-3997?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp updated CAMEL-3997: ------------------------------- Fix Version/s: 2.7.3 > Temporary file created by CachedOutputStream is not deleted after exchange is > completed > --------------------------------------------------------------------------------------- > > Key: CAMEL-3997 > URL: https://issues.apache.org/jira/browse/CAMEL-3997 > Project: Camel > Issue Type: Bug > Reporter: Ashwin Karpe > Assignee: Willem Jiang > Fix For: 2.7.3, 2.8.0 > > > There seems to be an issue related to tmp file created by CachedOutputStream. > > My issue: > 1. send a SOAP request to CXF consumer with a attachment whose size is > larger than 64K > 2. In my bundle, I will get the attachment by following code: > > from("cxf:bean:foobarEndpoint") > // foobarEndpoint is defined in bundle-context.xml > // <cxf:cxfEndpoint id="foobarEndpoint" > // serviceClass="com.mycompany.FooBar"> > // </cxf:cxfEndpoint> > .doTry() > .to("log:myInboundLogRoute -> Start") > .process(retrieveAttachment()) > .doCatch(Exception.class) > .doFinally() > //.process(removeAttachment()) > .end() > .to("log:myInboundLogRoute -> End"); > > > private Processor retrieveAttachment() { > return new Processor() { > public void process(Exchange exchange) throws Exception { > if (LOGGER.isDebugEnabled()) > LOGGER.debug("retrieveAttachment start"); > // handle attachments > > java.util.Collection<org.apache.cxf.message.Attachment> atts = > PhaseInterceptorChain > > .getCurrentMessage().getAttachments(); > > if (LOGGER.isDebugEnabled()) { > LOGGER.debug("retrieveAttachment done"); > } > } > }; > } > > 3. After the exchange is completed, there is a tmp file left under > /tmp/cxf-tmp-***/ directory, which has the same size of attachment. > Note: > a. If the size of attachment < 64k, there will be no tmp file left. > b. If in my bundle, I didn't invoke retrieveAttachment(), there will be > no tmp file left. > > It seems that CachedOutputStream is not closed by CXF properly after the > exchange is completed. I got some description from CachedOutputStream.java. > > 037 /** > 038 * This output stream will store the content into a File if the stream > context size is exceed the > 039 * THRESHOLD which's default value is 64K. The temp file will store in > the temp directory, you > 040 * can configure it by setting the TEMP_DIR property. If you don't set > the TEMP_DIR property, > 041 * it will choose the directory which is set by the system property of > "java.io.tmpdir". > 042 * You can get a cached input stream of this stream. The temp file > which is created with this > 043 * output stream will be deleted when you close this output stream or > the all cached > 044 * fileInputStream is closed after the exchange is completed. > 045 */ > > This issues is happening both in both fuse4.2 and fuse4.3. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira