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.
>
>
>