Hi,

I have a camel application deployed on RHEL5 with a default
encoding/locale of UTF-8

I have to download data from a remote Windows server (CP1251 or
ISO-8859-1/latin-1)

My route breaks down the processing of the files into two steps:
1 - download
2 - consume and pass split/tokenized String/bytes to POJOs for further
processing.

My problem stems from the fact that I don't seem to have control over
the charset that the FileConsumer uses as it converts the file into a
String.  The data contains encoded chars which are corrupted if the
data is read as UTF-8 instead of as ISO-8859-1.

I have a simple test case of a file encoded as ISO-8859-1 and I can
read it with a specific charset and this allows me to process the data
without corruption.  If I read it as UTF-8, the data is corrupted.

Is there any way I can instruct each of my FileConsumer endpoints to
consume the file using a specific charset/encoding?  I cannot change
the locale on the server to fix this as other files must be read as
UTF-8, not ISO-8859-1

I've looked at the camel source code and the way that camel consumes
files seems to rely on some kind of type coercion:

in FileBinding:
    public void loadContent(Exchange exchange, GenericFile<File> file)
throws IOException {
        try {
            content =
exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class,
file.getFile());
        } catch (NoTypeConversionAvailableException e) {
            throw IOHelper.createIOException("Cannot load file
content: " + file.getAbsoluteFilePath(), e);
        }
    }

Is this the code that actually consumes the file and creates the
message, or should I be looking elsewhere?  I'm trying to add a
property to GenericFileEndpoint that will allow me to set a parameter
via the uri :
file://target/encoded/?charsetEncoding=ISO-8859-1

Thanks,
Kev

Reply via email to