From 85591d23cd31f3869a3a06ffdab2f1c3a544dfb4 Mon Sep 17 00:00:00 2001 From: Naoyuki Kanezawa Date: Wed, 9 Jul 2014 04:11:18 +0900 Subject: [PATCH] fix #10 use org.json 20090211 --- pom.xml | 4 +- .../nkzawa/hasbinarydata/HasBinaryData.java | 17 ++++- .../github/nkzawa/socketio/client/Socket.java | 41 +++++------ .../github/nkzawa/socketio/parser/Binary.java | 33 +++++++-- .../hasbinarydata/HasBinaryDataTest.java | 2 +- .../socketio/client/ConnectionTest.java | 71 +++++++++++++------ .../socketio/client/ServerConnectionTest.java | 4 +- .../nkzawa/socketio/parser/ByteArrayTest.java | 7 +- .../nkzawa/socketio/parser/Helpers.java | 13 +++- .../nkzawa/socketio/parser/ParserTest.java | 5 +- 10 files changed, 131 insertions(+), 66 deletions(-) diff --git a/pom.xml b/pom.xml index cf283ed..dcf476f 100644 --- a/pom.xml +++ b/pom.xml @@ -57,12 +57,12 @@ com.github.nkzawa engine.io-client - 0.2.1 + 0.2.2-SNAPSHOT org.json json - 20140107 + 20090211 junit diff --git a/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java b/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java index be08be0..f57f3eb 100644 --- a/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java +++ b/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java @@ -1,6 +1,7 @@ package com.github.nkzawa.hasbinarydata; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import java.util.Iterator; @@ -24,7 +25,13 @@ public class HasBinaryData { JSONArray _obj = (JSONArray)obj; int length = _obj.length(); for (int i = 0; i < length; i++) { - if (recursiveCheckForBinary(_obj.isNull(i) ? null : _obj.get(i))) { + Object v; + try { + v = _obj.isNull(i) ? null : _obj.get(i); + } catch (JSONException e) { + return false; + } + if (recursiveCheckForBinary(v)) { return true; } } @@ -33,7 +40,13 @@ public class HasBinaryData { Iterator keys = _obj.keys(); while (keys.hasNext()) { String key = (String)keys.next(); - if (recursiveCheckForBinary(_obj.get(key))) { + Object v; + try { + v = _obj.get(key); + } catch (JSONException e) { + return false; + } + if (recursiveCheckForBinary(v)) { return true; } } diff --git a/src/main/java/com/github/nkzawa/socketio/client/Socket.java b/src/main/java/com/github/nkzawa/socketio/client/Socket.java index a603c65..c1c0088 100644 --- a/src/main/java/com/github/nkzawa/socketio/client/Socket.java +++ b/src/main/java/com/github/nkzawa/socketio/client/Socket.java @@ -47,18 +47,6 @@ public class Socket extends Emitter { put(EVENT_ERROR, 1); }}; - private static boolean jsonArrayNativeRemove; - - { - try { - jsonArrayNativeRemove = JSONArray.class.getMethod("remove", new Class[] { - int.class - }) != null; - } catch (NoSuchMethodException e) { - jsonArrayNativeRemove = false; - } - } - private boolean connected; private boolean disconnected = true; private int ids; @@ -170,12 +158,8 @@ public class Socket extends Emitter { if (_args.get(_args.size() - 1) instanceof Ack) { logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids)); Socket.this.acks.put(Socket.this.ids, (Ack)_args.remove(_args.size() - 1)); - if (jsonArrayNativeRemove) { - jsonArgs.remove(jsonArgs.length() - 1); - } else { - jsonArgs = remove(jsonArgs, jsonArgs.length() - 1); - packet.data = jsonArgs; - } + jsonArgs = remove(jsonArgs, jsonArgs.length() - 1); + packet.data = jsonArgs; packet.id = Socket.this.ids++; } @@ -187,14 +171,16 @@ public class Socket extends Emitter { private static JSONArray remove(JSONArray a, int pos) { JSONArray na = new JSONArray(); - try { - for (int i = 0; i < a.length(); i++){ - if (i != pos) { - na.put(a.get(i)); + for (int i = 0; i < a.length(); i++){ + if (i != pos) { + Object v; + try { + v = a.get(i); + } catch (JSONException e) { + v = null; } + na.put(v); } - } catch (Exception e) { - throw new JSONException(e); } return na; } @@ -392,7 +378,12 @@ public class Socket extends Emitter { int length = array.length(); Object[] data = new Object[length]; for (int i = 0; i < length; i++) { - Object v = array.get(i); + Object v; + try { + v = array.get(i); + } catch (JSONException e) { + v = null; + } data[i] = v == JSONObject.NULL ? null : v; } return data; diff --git a/src/main/java/com/github/nkzawa/socketio/parser/Binary.java b/src/main/java/com/github/nkzawa/socketio/parser/Binary.java index c5c677a..44d47da 100644 --- a/src/main/java/com/github/nkzawa/socketio/parser/Binary.java +++ b/src/main/java/com/github/nkzawa/socketio/parser/Binary.java @@ -1,6 +1,7 @@ package com.github.nkzawa.socketio.parser; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; @@ -31,8 +32,12 @@ public class Binary { if (data instanceof byte[]) { JSONObject placeholder = new JSONObject(); - placeholder.put(KEY_PLACEHOLDER, true); - placeholder.put(KEY_NUM, buffers.size()); + try { + placeholder.put(KEY_PLACEHOLDER, true); + placeholder.put(KEY_NUM, buffers.size()); + } catch (JSONException e) { + return null; + } buffers.add((byte[])data); return placeholder; } else if (data instanceof JSONArray) { @@ -40,7 +45,11 @@ public class Binary { JSONArray _data = (JSONArray)data; int len = _data.length(); for (int i = 0; i < len; i ++) { - newData.put(i, _deconstructPacket(_data.get(i), buffers)); + try { + newData.put(i, _deconstructPacket(_data.get(i), buffers)); + } catch (JSONException e) { + return null; + } } return newData; } else if (data instanceof JSONObject) { @@ -49,7 +58,11 @@ public class Binary { Iterator iterator = _data.keys(); while (iterator.hasNext()) { String key = (String)iterator.next(); - newData.put(key, _deconstructPacket(_data.get(key), buffers)); + try { + newData.put(key, _deconstructPacket(_data.get(key), buffers)); + } catch (JSONException e) { + return null; + } } return newData; } @@ -67,7 +80,11 @@ public class Binary { JSONArray _data = (JSONArray)data; int len = _data.length(); for (int i = 0; i < len; i ++) { - _data.put(i, _reconstructPacket(_data.get(i), buffers)); + try { + _data.put(i, _reconstructPacket(_data.get(i), buffers)); + } catch (JSONException e) { + return null; + } } return _data; } else if (data instanceof JSONObject) { @@ -79,7 +96,11 @@ public class Binary { Iterator iterator = _data.keys(); while (iterator.hasNext()) { String key = (String)iterator.next(); - _data.put(key, _reconstructPacket(_data.get(key), buffers)); + try { + _data.put(key, _reconstructPacket(_data.get(key), buffers)); + } catch (JSONException e) { + return null; + } } return _data; } diff --git a/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java b/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java index 88ab744..98a0ef5 100644 --- a/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java +++ b/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.assertTrue; public class HasBinaryDataTest { @Test - public void arrayContainsByteArray() { + public void arrayContainsByteArray() throws Exception { JSONArray arr = new JSONArray("[1, null, 2]"); arr.put(1, "asdfasdf".getBytes(Charset.forName("UTF-8"))); assertTrue(HasBinaryData.hasBinary(arr)); diff --git a/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java b/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java index fb6f022..119250c 100644 --- a/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java +++ b/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java @@ -1,6 +1,7 @@ package com.github.nkzawa.socketio.client; import com.github.nkzawa.emitter.Emitter; +import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,7 +58,11 @@ public class ConnectionTest extends Connection { public void call(Object... args) { Ack fn = (Ack) args[0]; JSONObject data = new JSONObject(); - data.put("test", true); + try { + data.put("test", true); + } catch (JSONException e) { + throw new AssertionError(e); + } fn.call(5, data); } }); @@ -65,9 +70,13 @@ public class ConnectionTest extends Connection { @Override public void call(Object... args) { JSONObject data = (JSONObject)args[1]; - if ((Integer)args[0] == 5 && data.getBoolean("test")) { - socket.close(); - latch.countDown(); + try { + if ((Integer)args[0] == 5 && data.getBoolean("test")) { + socket.close(); + latch.countDown(); + } + } catch (JSONException e) { + throw new AssertionError(e); } } }); @@ -84,14 +93,18 @@ public class ConnectionTest extends Connection { socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override public void call(Object... objects) { - socket.emit("getAckDate", new JSONObject("{test: true}"), new Ack() { - @Override - public void call(Object... args) { - assertThat(args[0], instanceOf(String.class)); - socket.close(); - latch.countDown(); - } - }); + try { + socket.emit("getAckDate", new JSONObject("{test: true}"), new Ack() { + @Override + public void call(Object... args) { + assertThat(args[0], instanceOf(String.class)); + socket.close(); + latch.countDown(); + } + }); + } catch (JSONException e) { + throw new AssertionError(e); + } } }); socket.connect(); @@ -329,13 +342,21 @@ public class ConnectionTest extends Connection { @Override public void call(Object... objects) { JSONObject data = new JSONObject(); - data.put("date", new Date()); + try { + data.put("date", new Date()); + } catch (JSONException e) { + throw new AssertionError(e); + } socket.emit("echo", data); socket.on("echoBack", new Emitter.Listener() { @Override public void call(Object... args) { assertThat(args[0], instanceOf(JSONObject.class)); - assertThat(((JSONObject)args[0]).get("date"), instanceOf(String.class)); + try { + assertThat(((JSONObject)args[0]).get("date"), instanceOf(String.class)); + } catch (JSONException e) { + throw new AssertionError(e); + } socket.close(); latch.countDown(); } @@ -379,17 +400,25 @@ public class ConnectionTest extends Connection { public void call(Object... args) { final byte[] buf = "howdy".getBytes(Charset.forName("UTF-8")); JSONObject data = new JSONObject(); - data.put("hello", "lol"); - data.put("message", buf); - data.put("goodbye", "gotcha"); + try { + data.put("hello", "lol"); + data.put("message", buf); + data.put("goodbye", "gotcha"); + } catch (JSONException e) { + throw new AssertionError(e); + } socket.emit("echo", data); socket.on("echoBack", new Emitter.Listener() { @Override public void call(Object... args) { JSONObject a = (JSONObject)args[0]; - assertThat(a.getString("hello"), is("lol")); - assertThat((byte[])a.get("message"), is(buf)); - assertThat(a.getString("goodbye"), is("gotcha")); + try { + assertThat(a.getString("hello"), is("lol")); + assertThat((byte[])a.get("message"), is(buf)); + assertThat(a.getString("goodbye"), is("gotcha")); + } catch (JSONException e) { + throw new AssertionError(e); + } socket.close(); latch.countDown(); } @@ -401,7 +430,7 @@ public class ConnectionTest extends Connection { } @Test(timeout = TIMEOUT) - public void sendEventsWithByteArraysInTheCorrectOrder() throws URISyntaxException, InterruptedException { + public void sendEventsWithByteArraysInTheCorrectOrder() throws Exception { final CountDownLatch latch = new CountDownLatch(1); socket = client(); socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { diff --git a/src/test/java/com/github/nkzawa/socketio/client/ServerConnectionTest.java b/src/test/java/com/github/nkzawa/socketio/client/ServerConnectionTest.java index a9110c6..0ec14bd 100644 --- a/src/test/java/com/github/nkzawa/socketio/client/ServerConnectionTest.java +++ b/src/test/java/com/github/nkzawa/socketio/client/ServerConnectionTest.java @@ -72,7 +72,7 @@ public class ServerConnectionTest extends Connection { } @Test(timeout = TIMEOUT) - public void event() throws URISyntaxException, InterruptedException { + public void event() throws Exception { final Semaphore semaphore = new Semaphore(0); final JSONObject obj = new JSONObject(); @@ -102,7 +102,7 @@ public class ServerConnectionTest extends Connection { } @Test(timeout = TIMEOUT) - public void ack() throws URISyntaxException, InterruptedException { + public void ack() throws Exception { final Semaphore semaphore = new Semaphore(0); final JSONObject obj = new JSONObject(); diff --git a/src/test/java/com/github/nkzawa/socketio/parser/ByteArrayTest.java b/src/test/java/com/github/nkzawa/socketio/parser/ByteArrayTest.java index b69f125..39f19ce 100644 --- a/src/test/java/com/github/nkzawa/socketio/parser/ByteArrayTest.java +++ b/src/test/java/com/github/nkzawa/socketio/parser/ByteArrayTest.java @@ -2,6 +2,7 @@ package com.github.nkzawa.socketio.parser; import com.github.nkzawa.emitter.Emitter; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,7 +37,7 @@ public class ByteArrayTest { } @Test - public void encodeByteArrayDeepInJson() { + public void encodeByteArrayDeepInJson() throws JSONException { JSONObject data = new JSONObject("{a: \"hi\", b: {}, c: {a: \"bye\", b: {}}}"); data.getJSONObject("b").put("why", new byte[3]); data.getJSONObject("c").getJSONObject("b").put("a", new byte[6]); @@ -49,7 +50,7 @@ public class ByteArrayTest { } @Test - public void encodeDeepBinaryJSONWithNullValue() { + public void encodeDeepBinaryJSONWithNullValue() throws JSONException { JSONObject data = new JSONObject("{a: \"b\", c: 4, e: {g: null}, h: null}"); data.put("h", new byte[9]); @@ -61,7 +62,7 @@ public class ByteArrayTest { } @Test - public void encodeBinaryAckWithByteArray() { + public void encodeBinaryAckWithByteArray() throws JSONException { JSONArray data = new JSONArray("[a, null, {}]"); data.put(1, "xxx".getBytes(Charset.forName("UTF-8"))); diff --git a/src/test/java/com/github/nkzawa/socketio/parser/Helpers.java b/src/test/java/com/github/nkzawa/socketio/parser/Helpers.java index 449d64d..d3fb3f7 100644 --- a/src/test/java/com/github/nkzawa/socketio/parser/Helpers.java +++ b/src/test/java/com/github/nkzawa/socketio/parser/Helpers.java @@ -2,6 +2,7 @@ package com.github.nkzawa.socketio.parser; import com.github.nkzawa.emitter.Emitter; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -66,9 +67,17 @@ public class Helpers { assertThat(actual.attachments, is(expected.attachments)); if (expected.data instanceof JSONArray) { - JSONAssert.assertEquals((JSONArray)expected.data, (JSONArray)actual.data, true); + try { + JSONAssert.assertEquals((JSONArray)expected.data, (JSONArray)actual.data, true); + } catch (JSONException e) { + throw new AssertionError(e); + } } else if (expected.data instanceof JSONObject) { - JSONAssert.assertEquals((JSONObject)expected.data, (JSONObject)actual.data, true); + try { + JSONAssert.assertEquals((JSONObject)expected.data, (JSONObject)actual.data, true); + } catch (JSONException e) { + throw new AssertionError(e); + } } else { assertThat(actual.data, is(expected.data)); } diff --git a/src/test/java/com/github/nkzawa/socketio/parser/ParserTest.java b/src/test/java/com/github/nkzawa/socketio/parser/ParserTest.java index d102b64..372dd32 100644 --- a/src/test/java/com/github/nkzawa/socketio/parser/ParserTest.java +++ b/src/test/java/com/github/nkzawa/socketio/parser/ParserTest.java @@ -1,6 +1,7 @@ package com.github.nkzawa.socketio.parser; import org.json.JSONArray; +import org.json.JSONException; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -26,7 +27,7 @@ public class ParserTest { } @Test - public void encodeEvent() { + public void encodeEvent() throws JSONException { Packet packet1 = new Packet(Parser.EVENT); packet1.data = new JSONArray("[\"a\", 1, {}]"); packet1.nsp = "/"; @@ -39,7 +40,7 @@ public class ParserTest { } @Test - public void encodeAck() { + public void encodeAck() throws JSONException { Packet packet = new Packet(Parser.ACK); packet.data = new JSONArray("[\"a\", 1, {}]"); packet.id = 123;