mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
@@ -363,12 +363,12 @@ public class JsonConversion {
|
|||||||
buf.append('"').append(text).append('"');
|
buf.append('"').append(text).append('"');
|
||||||
} else {
|
} else {
|
||||||
text = m_data.getFixString((int) m_length, charsetName);
|
text = m_data.getFixString((int) m_length, charsetName);
|
||||||
buf.append('"').append(text).append('"');
|
buf.append('"').append(escapse(text)).append('"');
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case STRING:
|
case STRING:
|
||||||
buf.append('"').append(m_string_value).append('"');
|
buf.append('"').append(escapse(m_string_value)).append('"');
|
||||||
break;
|
break;
|
||||||
case ERROR:
|
case ERROR:
|
||||||
throw new IllegalArgumentException("illegal json data");
|
throw new IllegalArgumentException("illegal json data");
|
||||||
@@ -378,6 +378,21 @@ public class JsonConversion {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static StringBuilder escapse(String data) {
|
||||||
|
StringBuilder sb = new StringBuilder(data.length());
|
||||||
|
int endIndex = data.length();
|
||||||
|
for (int i = 0; i < endIndex; ++i) {
|
||||||
|
char c = data.charAt(i);
|
||||||
|
if (c == '"') {
|
||||||
|
sb.append('\\');
|
||||||
|
} else if (c == '\\') {
|
||||||
|
sb.append("\\");
|
||||||
|
}
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
return sb;
|
||||||
|
}
|
||||||
|
|
||||||
public static enum Json_enum_type {
|
public static enum Json_enum_type {
|
||||||
OBJECT, ARRAY, STRING, INT, UINT, DOUBLE, LITERAL_NULL, LITERAL_TRUE, LITERAL_FALSE, OPAQUE, ERROR
|
OBJECT, ARRAY, STRING, INT, UINT, DOUBLE, LITERAL_NULL, LITERAL_TRUE, LITERAL_FALSE, OPAQUE, ERROR
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -949,8 +949,28 @@ public final class RowsLogBuffer {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogEvent.MYSQL_TYPE_JSON: {
|
case LogEvent.MYSQL_TYPE_JSON: {
|
||||||
len = buffer.getUint16();
|
switch (meta) {
|
||||||
buffer.forward(meta - 2);
|
case 1: {
|
||||||
|
len = buffer.getUint8();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
len = buffer.getUint16();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
len = buffer.getUint24();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
len = (int) buffer.getUint32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("!! Unknown JSON packlen = " + meta);
|
||||||
|
}
|
||||||
|
// len = buffer.getUint16();
|
||||||
|
// buffer.forward(meta - 4);
|
||||||
int position = buffer.position();
|
int position = buffer.position();
|
||||||
Json_Value jsonValue = JsonConversion.parse_value(buffer.getUint8(), buffer, len - 1, charsetName);
|
Json_Value jsonValue = JsonConversion.parse_value(buffer.getUint8(), buffer, len - 1, charsetName);
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|||||||
@@ -275,7 +275,7 @@ public abstract class AbstractEventParser<EVENT> extends AbstractCanalLifeCycle
|
|||||||
parseThread.setUncaughtExceptionHandler(handler);
|
parseThread.setUncaughtExceptionHandler(handler);
|
||||||
parseThread.setName(String.format("destination = %s , address = %s , EventParser",
|
parseThread.setName(String.format("destination = %s , address = %s , EventParser",
|
||||||
destination,
|
destination,
|
||||||
runningInfo == null ? null : runningInfo.getAddress().toString()));
|
runningInfo == null ? null : runningInfo.getAddress()));
|
||||||
parseThread.start();
|
parseThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user