camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Franz Paul Forsthofer <emc2...@googlemail.com>
Subject Encoding problems in jsonpath - https://issues.apache.org/jira/browse/CAMEL-8905
Date Thu, 25 Jun 2015 12:35:31 GMT
Hello,

i detected three different encoding problems in jsonpath. I reported
them in https://issues.apache.org/jira/browse/CAMEL-8905 and attached
also a patch.

Can somebody of you have a look at the patch? I actually can do the
commit myself. However, in this case I would like to have a reviewer.

I propose in the patch to replace the code in JsonEngine.java
    public Object read(Exchange exchange) throws IOException,
InvalidPayloadException {
        Object json = exchange.getIn().getBody();

        if (json instanceof GenericFile) {
            try {
                json =
GenericFileConverter.genericFileToInputStream((GenericFile<?>) json,
exchange);
            } catch (NoTypeConversionAvailableException e) {
                json = ((WrappedFile<?>) json).getFile();
            }
        } else if (json instanceof WrappedFile) {
            json = ((WrappedFile<?>) json).getFile();
        }

        // the message body type should use the suitable read method
        if (json instanceof String) {
            String str = (String) json;
            return path.read(str, configuration);
        } else if (json instanceof InputStream) {
            InputStream is = (InputStream) json;
            return path.read(is,
Charset.defaultCharset().displayName(), configuration);
        } else if (json instanceof File) {
            File file = (File) json;
            return path.read(file, configuration);
        } else if (json instanceof URL) {
            URL url = (URL) json;
            return path.read(url, configuration);
        }

        // fallback as input stream
        InputStream is = exchange.getIn().getMandatoryBody(InputStream.class);
        return path.read(is);
    }

by the following code
    public Object read(Exchange exchange) throws IOException,
InvalidPayloadException {
        Object json = exchange.getIn().getBody();

        if (json instanceof GenericFile) {
            GenericFile<?> genericFile = (GenericFile<?>) json;
            if (genericFile.getCharset() != null) {
                // special treatment for generic file with charset
                InputStream inputStream;
                try {
                    inputStream =
GenericFileConverter.genericFileToInputStream((GenericFile<?>) json,
exchange);
                } catch (NoTypeConversionAvailableException e) {
                    // cannot happen
                    throw new IllegalStateException(e);
                }
                // the generic file converter converts the encoding to
the platform default encoding, therefore we can use the platform
default encoding
                return path.read(inputStream,
Charset.defaultCharset().name(), configuration);
            }
        }

        if  (json instanceof String) {
            String str = (String) json;
            return path.read(str, configuration);
        } else {
            InputStream is =
exchange.getIn().getMandatoryBody(InputStream.class);
            JsonStream jsonStream = new JsonStream(is);
            return path.read(jsonStream,
jsonStream.getEncoding().name(), configuration);
        }
    }

JsonStream determines the encoding of the json document according to
the chapter "3. Encoding" of the JSON spec
https://www.ietf.org/rfc/rfc4627.txt or according to its BOM.

Best Regards Franz

Mime
View raw message