Being able to use older version of JSON parser
authorJaroslav Tulach <jaroslav.tulach@netbeans.org>
Wed, 05 Feb 2014 12:15:05 +0100
changeset 525d1537ad194c2
parent 524 8003588eb2a8
child 526 e8774a17d438
Being able to use older version of JSON parser
ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java
     1.1 --- a/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Wed Feb 05 11:43:27 2014 +0100
     1.2 +++ b/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Wed Feb 05 12:15:05 2014 +0100
     1.3 @@ -49,7 +49,6 @@
     1.4  import java.io.PushbackInputStream;
     1.5  import java.io.Reader;
     1.6  import java.net.HttpURLConnection;
     1.7 -import java.net.MalformedURLException;
     1.8  import java.net.URL;
     1.9  import java.net.URLConnection;
    1.10  import java.util.Iterator;
    1.11 @@ -159,9 +158,7 @@
    1.12                  if (string) {
    1.13                      throw new JSONException("");
    1.14                  }
    1.15 -                Reader r = new InputStreamReader(is, "UTF-8");
    1.16 -
    1.17 -                JSONTokener tok = new JSONTokener(r);
    1.18 +                JSONTokener tok = createTokener(is);
    1.19                  Object obj;
    1.20                  obj = array ? new JSONArray(tok) : new JSONObject(tok);
    1.21                  json = convertToArray(obj);
    1.22 @@ -188,6 +185,24 @@
    1.23          }
    1.24      }
    1.25  
    1.26 +    private static JSONTokener createTokener(InputStream is) throws IOException {
    1.27 +        Reader r = new InputStreamReader(is, "UTF-8");
    1.28 +        try {
    1.29 +            return new JSONTokener(r);
    1.30 +        } catch (LinkageError ex) {
    1.31 +            // phones may carry outdated version of JSONTokener
    1.32 +            StringBuilder sb = new StringBuilder();
    1.33 +            for (;;) {
    1.34 +                int ch = r.read();
    1.35 +                if (ch == -1) {
    1.36 +                    break;
    1.37 +                }
    1.38 +                sb.append((char)ch);
    1.39 +            }
    1.40 +            return new JSONTokener(sb.toString());
    1.41 +        }
    1.42 +    }
    1.43 +
    1.44      static Object convertToArray(Object o) throws JSONException {
    1.45          if (o instanceof JSONArray) {
    1.46              JSONArray ja = (JSONArray)o;
    1.47 @@ -238,8 +253,7 @@
    1.48      
    1.49      public static Object parse(InputStream is) throws IOException {
    1.50          try {
    1.51 -            InputStreamReader r = new InputStreamReader(is, "UTF-8");
    1.52 -            JSONTokener t = new JSONTokener(r);
    1.53 +            JSONTokener t = createTokener(is);
    1.54              return new JSONObject(t);
    1.55          } catch (JSONException ex) {
    1.56              throw new IOException(ex);