You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Ashwin Karpe (JIRA)" <ji...@apache.org> on 2011/05/19 19:04:47 UTC
[jira] [Created] (CAMEL-3997) Temporary file created by
CachedOutputStream is not deleted after exchange is completed
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
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
[jira] [Updated] (CAMEL-3997) Temporary file created by
CachedOutputStream is not deleted after exchange is completed
Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
[ 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
[jira] [Resolved] (CAMEL-3997) Temporary file created by
CachedOutputStream is not deleted after exchange is completed
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-3997?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-3997.
--------------------------------
Resolution: Invalid
Fix Version/s: 2.8.0
Assignee: Willem Jiang
This is not a Camel issue but a CXF.
> 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.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
[jira] [Commented] (CAMEL-3997) Temporary file created by
CachedOutputStream is not deleted after exchange is completed
Posted by "Willem Jiang (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-3997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13036655#comment-13036655 ]
Willem Jiang commented on CAMEL-3997:
-------------------------------------
@Ashwin
The temp file is let by CXF, as the temp file prefix is cxf-tmp.
And there an know issue CXF-3504 about CXF attachment with SUN's Activation jar.
> 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
>
> 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