-
Notifications
You must be signed in to change notification settings - Fork 51
Open
Description
Received this error when sending large text content via polling transport:
WARN [2021-12-14 09:31:35,188] io.socket.parser.IOParser: An error occured while retrieving data from JSONTokener
! org.json.JSONException: Unterminated string at 7675 [character 7676 line 1]
! at org.json.JSONTokener.syntaxError(JSONTokener.java:507)
! at org.json.JSONTokener.nextString(JSONTokener.java:320)
! at org.json.JSONTokener.nextValue(JSONTokener.java:428)
! at org.json.JSONObject.<init>(JSONObject.java:233)
! at org.json.JSONTokener.nextValue(JSONTokener.java:431)
! at org.json.JSONObject.<init>(JSONObject.java:252)
! at org.json.JSONTokener.nextValue(JSONTokener.java:431)
! at org.json.JSONArray.<init>(JSONArray.java:125)
! at org.json.JSONTokener.nextValue(JSONTokener.java:434)
! at io.socket.parser.IOParser$Decoder.decodeString(IOParser.java:183)
! at io.socket.parser.IOParser$Decoder.add(IOParser.java:92)
! at io.socket.socketio.server.SocketIoClient.lambda$setup$2(SocketIoClient.java:161)
! at io.socket.emitter.Emitter.emit(Emitter.java:123)
! at io.socket.engineio.server.EngineIoSocket.emit(EngineIoSocket.java:185)
! at io.socket.engineio.server.EngineIoSocket.onPacket(EngineIoSocket.java:397)
! at io.socket.engineio.server.EngineIoSocket.lambda$setTransport$10(EngineIoSocket.java:300)
! at io.socket.emitter.Emitter.emit(Emitter.java:123)
! at io.socket.engineio.server.Transport.onPacket(Transport.java:104)
! at io.socket.engineio.server.transport.Polling.lambda$onData$1(Polling.java:197)
! at io.socket.engineio.parser.ParserV4.decodePayload(ParserV4.java:95)
! at io.socket.engineio.server.transport.Polling.onData(Polling.java:192)
! at io.socket.engineio.server.transport.Polling.onDataRequest(Polling.java:282)
! at io.socket.engineio.server.transport.Polling.onRequest(Polling.java:99)
! at io.socket.engineio.server.EngineIoSocket.onRequest(EngineIoSocket.java:213)
! at io.socket.engineio.server.EngineIoServer.handleRequest(EngineIoServer.java:168)
! at app.servlets.SocketIoServlet.service(SocketIoServlet.java:37)
Seems that using inputStream.read() in io.socket.engineio.server.transport.Polling.onDataRequest to stringify a large request body malforms the string.
Replacing
//noinspection ResultOfMethodCallIgnored
inputStream.read(mReadBuffer, 0, mReadBuffer.length);with
inputStream.readLine(mReadBuffer, 0, mReadBuffer.length);produced a valid string.
Alternatively, using a BufferedReader with request.getReader() seemed to work too.
StringBuilder buffer = new StringBuilder();
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
buffer.append(System.lineSeparator());
}
String data = buffer.toString()Metadata
Metadata
Assignees
Labels
No labels