1717import com .google .gson .GsonBuilder ;
1818import com .google .gson .JsonParseException ;
1919import com .google .gson .TypeAdapter ;
20- import com .google .gson .internal . bind . util . ISO8601Utils ;
20+ import com .google .gson .Strictness ;
2121import com .google .gson .stream .JsonReader ;
2222import com .google .gson .stream .JsonWriter ;
2323import com .google .gson .JsonElement ;
3535import java .lang .reflect .Type ;
3636import java .text .DateFormat ;
3737import java .text .ParseException ;
38- import java .text .ParsePosition ;
38+ import java .text .SimpleDateFormat ;
3939import java .util .Date ;
4040import java .util .Locale ;
4141import java .util .Map ;
4242import java .util .HashMap ;
43+ import java .util .TimeZone ;
4344
4445public class JSON {
46+ private static final DateFormat ISO8601DateFormat ;
47+ static {
48+ ISO8601DateFormat = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss.SSSXXX" , Locale .US );
49+ ISO8601DateFormat .setTimeZone (TimeZone .getTimeZone ("UTC" ));
50+ }
51+
4552 private Gson gson ;
4653 private boolean isLenientOnJson = false ;
4754 private DateTypeAdapter dateTypeAdapter = new DateTypeAdapter ();
@@ -139,8 +146,7 @@ public <T> T deserialize(String body, Type returnType) {
139146 try {
140147 if (isLenientOnJson ) {
141148 JsonReader jsonReader = new JsonReader (new StringReader (body ));
142- // see https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/stream/JsonReader.html#setLenient(boolean)
143- jsonReader .setLenient (true );
149+ jsonReader .setStrictness (Strictness .LENIENT );
144150 return gson .fromJson (jsonReader , returnType );
145151 } else {
146152 return gson .fromJson (body , returnType );
@@ -325,7 +331,7 @@ public java.sql.Date read(JsonReader in) throws IOException {
325331 if (dateFormat != null ) {
326332 return new java .sql .Date (dateFormat .parse (date ).getTime ());
327333 }
328- return new java .sql .Date (ISO8601Utils .parse (date , new ParsePosition ( 0 ) ).getTime ());
334+ return new java .sql .Date (ISO8601DateFormat .parse (date ).getTime ());
329335 } catch (ParseException e ) {
330336 throw new JsonParseException (e );
331337 }
@@ -360,7 +366,7 @@ public void write(JsonWriter out, Date date) throws IOException {
360366 if (dateFormat != null ) {
361367 value = dateFormat .format (date );
362368 } else {
363- value = ISO8601Utils .format (date , true );
369+ value = ISO8601DateFormat .format (date );
364370 }
365371 out .value (value );
366372 }
@@ -379,7 +385,7 @@ public Date read(JsonReader in) throws IOException {
379385 if (dateFormat != null ) {
380386 return dateFormat .parse (date );
381387 }
382- return ISO8601Utils .parse (date , new ParsePosition ( 0 ) );
388+ return ISO8601DateFormat .parse (date );
383389 } catch (ParseException e ) {
384390 throw new JsonParseException (e );
385391 }
0 commit comments