diff --git a/pom.xml b/pom.xml
index 06a886c..9ae2806 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,7 +44,7 @@
org.json
json
- 20140107
+ 20090211
org.java-websocket
diff --git a/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java b/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java
index 8c80aff..4cb9f57 100644
--- a/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java
+++ b/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java
@@ -2,6 +2,7 @@ package com.github.nkzawa.engineio.client;
import org.json.JSONArray;
+import org.json.JSONException;
import org.json.JSONObject;
public class HandshakeData {
@@ -11,7 +12,11 @@ public class HandshakeData {
public long pingInterval;
public long pingTimeout;
- /*package*/ HandshakeData(JSONObject data) {
+ /*package*/ HandshakeData(String data) throws JSONException {
+ this(new JSONObject(data));
+ }
+
+ /*package*/ HandshakeData(JSONObject data) throws JSONException {
JSONArray upgrades = data.getJSONArray("upgrades");
int length = upgrades.length();
String[] _upgrades = new String[length];
diff --git a/src/main/java/com/github/nkzawa/engineio/client/Socket.java b/src/main/java/com/github/nkzawa/engineio/client/Socket.java
index 77828fb..a706ecf 100644
--- a/src/main/java/com/github/nkzawa/engineio/client/Socket.java
+++ b/src/main/java/com/github/nkzawa/engineio/client/Socket.java
@@ -8,12 +8,15 @@ import com.github.nkzawa.engineio.parser.Packet;
import com.github.nkzawa.engineio.parser.Parser;
import com.github.nkzawa.parseqs.ParseQS;
import com.github.nkzawa.thread.EventThread;
-import org.json.JSONObject;
+import org.json.JSONException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
@@ -434,7 +437,11 @@ public class Socket extends Emitter {
this.emit(EVENT_HEARTBEAT);
if (Packet.OPEN.equals(packet.type)) {
- this.onHandshake(new HandshakeData(new JSONObject((String)packet.data)));
+ try {
+ this.onHandshake(new HandshakeData((String)packet.data));
+ } catch (JSONException e) {
+ this.emit(EVENT_ERROR, new EngineIOException(e));
+ }
} else if (Packet.PONG.equals(packet.type)) {
this.setPing();
} else if (Packet.ERROR.equals(packet.type)) {