You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by 차정호 <jh...@barunmo.com> on 2013/12/06 14:30:45 UTC

GsonDataFormat.java mashaling/unmarshaling problem

Dear Camel developers.

 

I have tested json marshaling / unmarshaling with gson library,

and found there was charset assignment missing

at org.apache.camel.component.gson.GsonDataFormat.java

in Camel version 2.12.0

 

The marshal and unmarshal methods should create a stream writer or reader
with the charset "UTF-8”.

If not, Gson fails when unmarshaling non ascii character json stream like
{“name”: “차”}.

This is the exception.

com.google.gson.JsonSyntaxException:
com.google.gson.stream.MalformedJsonException: Unterminated string at line
1 column 14

           at com.google.gson.Gson.fromJson(Gson.java:818)

           at com.google.gson.Gson.fromJson(Gson.java:741)

           at
org.apache.camel.component.gson.GsonDataFormat.unmarshal(GsonDataFormat.java
:105)

…

 

So I suggest that GsonDataFormat.java be modified to have the charset
assignment part like below.

           …

           public void marshal(Exchange exchange, Object graph,
OutputStream stream) throws Exception {

                     BufferedWriter writer = IOHelper.buffered(new
OutputStreamWriter(stream, "UTF-8")); // <- modify here, please

                     gsontoJson(graph, writer);

                     writer.close();

           }

 

           …

           public Object unmarshal(Exchange exchange, InputStream stream)
throws Exception {

                     BufferedReader reader = IOHelper.buffered(new
InputStreamReader(stream, "UTF-8")); // <- modify here, please

                     Object result = gson.fromJson(reader,
this.unmarshalType);

                    reader.close();

                    return result;     

}

See https://sites.google.com/site/gson/streaming

 

Maybe I have misunderstood this, but check it please.

 

Thanks.

 


Re: GsonDataFormat.java mashaling/unmarshaling problem

Posted by Aki Yoshida <el...@gmail.com>.
this issue has been fixed in 2.12.2 with
https://issues.apache.org/jira/browse/CAMEL-6873

the charset name will be taken from the charset name property
(Excahnge.CHARSET_NAME) of the exchange.

regards, aki

2013/12/6 차정호 <jh...@barunmo.com>:
> Dear Camel developers.
>
>
>
> I have tested json marshaling / unmarshaling with gson library,
>
> and found there was charset assignment missing
>
> at org.apache.camel.component.gson.GsonDataFormat.java
>
> in Camel version 2.12.0
>
>
>
> The marshal and unmarshal methods should create a stream writer or reader
> with the charset "UTF-8”.
>
> If not, Gson fails when unmarshaling non ascii character json stream like
> {“name”: “차”}.
>
> This is the exception.
>
> com.google.gson.JsonSyntaxException:
> com.google.gson.stream.MalformedJsonException: Unterminated string at line
> 1 column 14
>
>            at com.google.gson.Gson.fromJson(Gson.java:818)
>
>            at com.google.gson.Gson.fromJson(Gson.java:741)
>
>            at
> org.apache.camel.component.gson.GsonDataFormat.unmarshal(GsonDataFormat.java
> :105)
>
> …
>
>
>
> So I suggest that GsonDataFormat.java be modified to have the charset
> assignment part like below.
>
>            …
>
>            public void marshal(Exchange exchange, Object graph,
> OutputStream stream) throws Exception {
>
>                      BufferedWriter writer = IOHelper.buffered(new
> OutputStreamWriter(stream, "UTF-8")); // <- modify here, please
>
>                      gsontoJson(graph, writer);
>
>                      writer.close();
>
>            }
>
>
>
>            …
>
>            public Object unmarshal(Exchange exchange, InputStream stream)
> throws Exception {
>
>                      BufferedReader reader = IOHelper.buffered(new
> InputStreamReader(stream, "UTF-8")); // <- modify here, please
>
>                      Object result = gson.fromJson(reader,
> this.unmarshalType);
>
>                     reader.close();
>
>                     return result;
>
> }
>
> See https://sites.google.com/site/gson/streaming
>
>
>
> Maybe I have misunderstood this, but check it please.
>
>
>
> Thanks.
>
>
>