camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r814413 - in /websites/production/camel/content: book-component-appendix.html book-in-one-page.html cache/main.pageCache file2.html
Date Wed, 25 Apr 2012 15:21:29 GMT
Author: buildbot
Date: Wed Apr 25 15:21:28 2012
New Revision: 814413

Log:
Production update by buildbot for camel

Modified:
    websites/production/camel/content/book-component-appendix.html
    websites/production/camel/content/book-in-one-page.html
    websites/production/camel/content/cache/main.pageCache
    websites/production/camel/content/file2.html

Modified: websites/production/camel/content/book-component-appendix.html
==============================================================================
--- websites/production/camel/content/book-component-appendix.html (original)
+++ websites/production/camel/content/book-component-appendix.html Wed Apr 25 15:21:28 2012
@@ -3642,7 +3642,7 @@ Also, the starting directory must not co
 
 <h4><a shape="rect" name="BookComponentAppendix-Common"></a>Common</h4>
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.5:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with Exchange.CHARSET_NAME with the value of this option. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9.3:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with <tt>Exchange.CHARSET_NAME</tt> with the value of this option. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. See further below for a examples and more important details. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in 
 case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
 </div>
 </div>
 
@@ -3756,6 +3756,70 @@ move=backup/${date:now:yyyyMMdd}/${file:
 
 <p>This allows you for instance to know how many files exists in this batch and for instance let the <a shape="rect" href="aggregator2.html" title="Aggregator2">Aggregator2</a> aggregate this number of files.</p>
 
+<h3><a shape="rect" name="BookComponentAppendix-Usingcharset"></a>Using charset</h3>
+<p><b>Available as of Camel 2.9.3</b> <br clear="none">
+The charset option allows to configure an encoding of the files on both the consumer and producer endpoints. For example if you read utf-8 files, and want to convert the files to iso-8859-1, you can do:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+
+<p>You can also use the <tt>convertBodyTo</tt> in the route. In the example below we have still input files in utf-8 format, but we want to convert the file content to a byte array in iso-8859-1 format. And then let a bean process the data. Before writing the content to the outbox folder using the current charset.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>If you omit the charset on the consumer endpoint, then Camel does not know the charset of the file, and would by default use "UTF-8". However you can configure a JVM system property to override and use a different default encoding with the key <tt>org.apache.camel.default.charset</tt>.</p>
+
+<p>In the example below this could be a problem if the files is not in UTF-8 encoding, which would be the default encoding for read the files.<br clear="none">
+In this example when writing the files, the content has already been converted to a byte array, and thus would write the content directly as is (without any further encodings).</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>You can also override and control the encoding dynamic when writing files, by setting a property on the exchange with the key <tt>Exchange.CHARSET_NAME</tt>. For example in the route below we set the property with a value from a message header.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .setProperty(Exchange.CHARSET_NAME, header(<span class="code-quote">"someCharsetHeader"</span>))
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>We suggest to keep things simpler, so if you pickup files with the same encoding, and want to write the files in a specific encoding, then favor to use the <tt>charset</tt> option on the endpoints.</p>
+
+<p>Notice that if you have explicit configured a <tt>charset</tt> option on the endpoint, then that configuration is used, regardless of the <tt>Exchange.CHARSET_NAME</tt> property.</p>
+
+<p>If you have some issues then you can enable DEBUG logging on <tt>org.apache.camel.component.file</tt>, and Camel logs when it reads/write a file using a specific charset.<br clear="none">
+For example the route below will log the following:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+<p>And the logs:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+DEBUG GenericFileConverter           - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt with charset utf-8
+DEBUG FileOperations                 - Using Reader to write file: target/charset/output.txt with charset: iso-8859-1
+</pre>
+</div></div>
 
 <h3><a shape="rect" name="BookComponentAppendix-Commongotchaswithfolderandfilenames"></a>Common gotchas with folder and filenames</h3>
 
@@ -4351,7 +4415,7 @@ you need to implement a custom <tt>Excep
  * Custom {@link ExceptionHandler} to be used on the file consumer, to send
  * exceptions to a Camel route, to let Camel deal with the error.
  */
-<span class="code-keyword">private</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
+<span class="code-keyword">private</span> <span class="code-keyword">static</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
 
     <span class="code-keyword">private</span> ProducerTemplate template;
 
@@ -8007,11 +8071,7 @@ jcr:<span class="code-comment">//user:pa
 
 <h3><a shape="rect" name="BookComponentAppendix-Example"></a>Example</h3>
 <p>The snippet below creates a node named <tt>node</tt> under the <tt>/home/test</tt> node in the content repository.  One additional attribute is added to the node as well: <tt>my.contents.property</tt> which will contain the body of the message being sent.</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">from(<span class="code-quote">"direct:a"</span>).setProperty(JcrConstants.JCR_NODE_NAME, constant(<span class="code-quote">"node"</span>))
-    .setProperty(<span class="code-quote">"my.contents.property"</span>, body()).to(<span class="code-quote">"jcr:<span class="code-comment">//user:pass@repository/home/test"</span>);</span>
-</pre>
-</div></div>
+<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
 
 <h3><a shape="rect" name="BookComponentAppendix-SeeAlso"></a>See Also</h3>
 <ul><li><a shape="rect" href="configuring-camel.html" title="Configuring Camel">Configuring Camel</a></li><li><a shape="rect" href="component.html" title="Component">Component</a></li><li><a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a></li><li><a shape="rect" href="getting-started.html" title="Getting Started">Getting Started</a></li></ul>

Modified: websites/production/camel/content/book-in-one-page.html
==============================================================================
--- websites/production/camel/content/book-in-one-page.html (original)
+++ websites/production/camel/content/book-in-one-page.html Wed Apr 25 15:21:28 2012
@@ -23852,7 +23852,7 @@ Also, the starting directory must not co
 
 <h4><a shape="rect" name="BookInOnePage-Common"></a>Common</h4>
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.5:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with Exchange.CHARSET_NAME with the value of this option. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9.3:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with <tt>Exchange.CHARSET_NAME</tt> with the value of this option. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. See further below for a examples and more important details. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in 
 case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
 </div>
 </div>
 
@@ -23966,6 +23966,70 @@ move=backup/${date:now:yyyyMMdd}/${file:
 
 <p>This allows you for instance to know how many files exists in this batch and for instance let the <a shape="rect" href="aggregator2.html" title="Aggregator2">Aggregator2</a> aggregate this number of files.</p>
 
+<h3><a shape="rect" name="BookInOnePage-Usingcharset"></a>Using charset</h3>
+<p><b>Available as of Camel 2.9.3</b> <br clear="none">
+The charset option allows to configure an encoding of the files on both the consumer and producer endpoints. For example if you read utf-8 files, and want to convert the files to iso-8859-1, you can do:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+
+<p>You can also use the <tt>convertBodyTo</tt> in the route. In the example below we have still input files in utf-8 format, but we want to convert the file content to a byte array in iso-8859-1 format. And then let a bean process the data. Before writing the content to the outbox folder using the current charset.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>If you omit the charset on the consumer endpoint, then Camel does not know the charset of the file, and would by default use "UTF-8". However you can configure a JVM system property to override and use a different default encoding with the key <tt>org.apache.camel.default.charset</tt>.</p>
+
+<p>In the example below this could be a problem if the files is not in UTF-8 encoding, which would be the default encoding for read the files.<br clear="none">
+In this example when writing the files, the content has already been converted to a byte array, and thus would write the content directly as is (without any further encodings).</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>You can also override and control the encoding dynamic when writing files, by setting a property on the exchange with the key <tt>Exchange.CHARSET_NAME</tt>. For example in the route below we set the property with a value from a message header.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .setProperty(Exchange.CHARSET_NAME, header(<span class="code-quote">"someCharsetHeader"</span>))
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>We suggest to keep things simpler, so if you pickup files with the same encoding, and want to write the files in a specific encoding, then favor to use the <tt>charset</tt> option on the endpoints.</p>
+
+<p>Notice that if you have explicit configured a <tt>charset</tt> option on the endpoint, then that configuration is used, regardless of the <tt>Exchange.CHARSET_NAME</tt> property.</p>
+
+<p>If you have some issues then you can enable DEBUG logging on <tt>org.apache.camel.component.file</tt>, and Camel logs when it reads/write a file using a specific charset.<br clear="none">
+For example the route below will log the following:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+<p>And the logs:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+DEBUG GenericFileConverter           - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt with charset utf-8
+DEBUG FileOperations                 - Using Reader to write file: target/charset/output.txt with charset: iso-8859-1
+</pre>
+</div></div>
 
 <h3><a shape="rect" name="BookInOnePage-Commongotchaswithfolderandfilenames"></a>Common gotchas with folder and filenames</h3>
 
@@ -24561,7 +24625,7 @@ you need to implement a custom <tt>Excep
  * Custom {@link ExceptionHandler} to be used on the file consumer, to send
  * exceptions to a Camel route, to let Camel deal with the error.
  */
-<span class="code-keyword">private</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
+<span class="code-keyword">private</span> <span class="code-keyword">static</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
 
     <span class="code-keyword">private</span> ProducerTemplate template;
 
@@ -28217,11 +28281,7 @@ jcr:<span class="code-comment">//user:pa
 
 <h3><a shape="rect" name="BookInOnePage-Example"></a>Example</h3>
 <p>The snippet below creates a node named <tt>node</tt> under the <tt>/home/test</tt> node in the content repository.  One additional attribute is added to the node as well: <tt>my.contents.property</tt> which will contain the body of the message being sent.</p>
-<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">from(<span class="code-quote">"direct:a"</span>).setProperty(JcrConstants.JCR_NODE_NAME, constant(<span class="code-quote">"node"</span>))
-    .setProperty(<span class="code-quote">"my.contents.property"</span>, body()).to(<span class="code-quote">"jcr:<span class="code-comment">//user:pass@repository/home/test"</span>);</span>
-</pre>
-</div></div>
+<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>
 
 <h3><a shape="rect" name="BookInOnePage-SeeAlso"></a>See Also</h3>
 <ul><li><a shape="rect" href="configuring-camel.html" title="Configuring Camel">Configuring Camel</a></li><li><a shape="rect" href="component.html" title="Component">Component</a></li><li><a shape="rect" href="endpoint.html" title="Endpoint">Endpoint</a></li><li><a shape="rect" href="getting-started.html" title="Getting Started">Getting Started</a></li></ul>

Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/camel/content/file2.html
==============================================================================
--- websites/production/camel/content/file2.html (original)
+++ websites/production/camel/content/file2.html Wed Apr 25 15:21:28 2012
@@ -109,7 +109,7 @@ Also, the starting directory must not co
 
 <h4><a shape="rect" name="File2-Common"></a>Common</h4>
 <div class="confluenceTableSmall"><div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.5:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with Exchange.CHARSET_NAME with the value of this option. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"> Name </th><th colspan="1" rowspan="1" class="confluenceTh"> Default Value </th><th colspan="1" rowspan="1" class="confluenceTh"> Description </th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>autoCreate</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Automatically create missing directories in the file's pathname. For the file consumer, that means creating the starting directory. For the file producer, it means the directory the files should be written to. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>bufferSize</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> 128kb </td><td colspan="1" rowspan="1" class="confluenceTd"> Write buffer sized in bytes. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>fileName</tt> </td><td colspan="1" rowspa
 n="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Use <a shape="rect" href="expression.html" title="Expression">Expression</a> such as <a shape="rect" href="file-language.html" title="File Language">File Language</a> to dynamically set the filename. For consumers, it's used as a filename filter. For producers, it's used to evaluate the filename to write. If an expression is set, it take precedence over the <tt>CamelFileName</tt> header. (<b>Note:</b> The header itself can also be an <a shape="rect" href="expression.html" title="Expression">Expression</a>). The expression options support both <tt>String</tt> and <tt>Expression</tt> types. If the expression is a <tt>String</tt> type, it is <b>always</b> evaluated using the <a shape="rect" href="file-language.html" title="File Language">File Language</a>. If the expression is an <tt>Expression</tt> type, the specified <tt>Expression</tt> type is used - this allows you, for instance
 , to use <a shape="rect" href="ognl.html" title="OGNL">OGNL</a> expressions. For the consumer, you can use it to filter filenames, so you can for instance consume today's file using the <a shape="rect" href="file-language.html" title="File Language">File Language</a> syntax: <tt>mydata-${date:now:yyyyMMdd}.txt</tt>. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>flatten</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>false</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> Flatten is used to flatten the file name path to strip any leading paths, so it's just the file name. This allows you to consume recursively into sub-directories, but when you eg write the files to another directory they will be written in a single directory. Setting this to <tt>true</tt> on the producer enforces that any file name recived in <tt>CamelFileName</tt> header will be stripped for any leading paths. </td></tr><tr><td colspan="1" rowspan="1" class="c
 onfluenceTd"> <tt>charset</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>null</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9.3:</b> this option is used to specify the encoding of the file, and camel will set the Exchange property with <tt>Exchange.CHARSET_NAME</tt> with the value of this option. You can use this on the consumer, to specify the encodings of the files, which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file, you can use this option to specify which charset to write the file as well. See further below for a examples and more important details. </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> <tt>copyAndDeleteOnRenameFail</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <tt>true</tt> </td><td colspan="1" rowspan="1" class="confluenceTd"> <b>Camel 2.9</b>: whether to fallback and do a copy and delete file, in 
 case the file could not be renamed directly. This option is not available for the <a shape="rect" href="ftp2.html" title="FTP2">FTP</a> component. </td></tr></tbody></table>
 </div>
 </div>
 
@@ -223,6 +223,70 @@ move=backup/${date:now:yyyyMMdd}/${file:
 
 <p>This allows you for instance to know how many files exists in this batch and for instance let the <a shape="rect" href="aggregator2.html" title="Aggregator2">Aggregator2</a> aggregate this number of files.</p>
 
+<h3><a shape="rect" name="File2-Usingcharset"></a>Using charset</h3>
+<p><b>Available as of Camel 2.9.3</b> <br clear="none">
+The charset option allows to configure an encoding of the files on both the consumer and producer endpoints. For example if you read utf-8 files, and want to convert the files to iso-8859-1, you can do:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+
+<p>You can also use the <tt>convertBodyTo</tt> in the route. In the example below we have still input files in utf-8 format, but we want to convert the file content to a byte array in iso-8859-1 format. And then let a bean process the data. Before writing the content to the outbox folder using the current charset.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>If you omit the charset on the consumer endpoint, then Camel does not know the charset of the file, and would by default use "UTF-8". However you can configure a JVM system property to override and use a different default encoding with the key <tt>org.apache.camel.default.charset</tt>.</p>
+
+<p>In the example below this could be a problem if the files is not in UTF-8 encoding, which would be the default encoding for read the files.<br clear="none">
+In this example when writing the files, the content has already been converted to a byte array, and thus would write the content directly as is (without any further encodings).</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>You can also override and control the encoding dynamic when writing files, by setting a property on the exchange with the key <tt>Exchange.CHARSET_NAME</tt>. For example in the route below we set the property with a value from a message header.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox"</span>)
+  .convertBodyTo(<span class="code-object">byte</span>[].class, <span class="code-quote">"iso-8859-1"</span>)
+  .to(<span class="code-quote">"bean:myBean"</span>)
+  .setProperty(Exchange.CHARSET_NAME, header(<span class="code-quote">"someCharsetHeader"</span>))
+  .to(<span class="code-quote">"file:outbox"</span>);
+</pre>
+</div></div>
+
+<p>We suggest to keep things simpler, so if you pickup files with the same encoding, and want to write the files in a specific encoding, then favor to use the <tt>charset</tt> option on the endpoints.</p>
+
+<p>Notice that if you have explicit configured a <tt>charset</tt> option on the endpoint, then that configuration is used, regardless of the <tt>Exchange.CHARSET_NAME</tt> property.</p>
+
+<p>If you have some issues then you can enable DEBUG logging on <tt>org.apache.camel.component.file</tt>, and Camel logs when it reads/write a file using a specific charset.<br clear="none">
+For example the route below will log the following:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+from(<span class="code-quote">"file:inbox?charset=utf-8"</span>)
+  .to(<span class="code-quote">"file:outbox?charset=iso-8859-1"</span>)
+</pre>
+</div></div>
+<p>And the logs:</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+DEBUG GenericFileConverter           - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt with charset utf-8
+DEBUG FileOperations                 - Using Reader to write file: target/charset/output.txt with charset: iso-8859-1
+</pre>
+</div></div>
 
 <h3><a shape="rect" name="File2-Commongotchaswithfolderandfilenames"></a>Common gotchas with folder and filenames</h3>
 
@@ -818,7 +882,7 @@ you need to implement a custom <tt>Excep
  * Custom {@link ExceptionHandler} to be used on the file consumer, to send
  * exceptions to a Camel route, to let Camel deal with the error.
  */
-<span class="code-keyword">private</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
+<span class="code-keyword">private</span> <span class="code-keyword">static</span> class MyExceptionHandler <span class="code-keyword">implements</span> ExceptionHandler {
 
     <span class="code-keyword">private</span> ProducerTemplate template;
 



Mime
View raw message