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