use of org.spf4j.io.AppendableOutputStream in project spf4j by zolyfarkas.
the class GenericRecordAppender method append.
@Override
public void append(final GenericRecord object, final Appendable appendTo) throws IOException {
StringBuilder sb = TMP.get();
sb.setLength(0);
try (AppendableOutputStream bos = new AppendableOutputStream(appendTo, Charsets.UTF_8)) {
final Schema schema = object.getSchema();
GenericDatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
JsonEncoder jsonEncoder = SpecificRecordAppender.EF.jsonEncoder(schema, bos);
writer.write(object, jsonEncoder);
jsonEncoder.flush();
} catch (IOException | RuntimeException ex) {
writeSerializationError(object, sb, ex);
}
appendTo.append(sb);
}
use of org.spf4j.io.AppendableOutputStream in project spf4j by zolyfarkas.
the class SpecificRecordAppender method append.
@Override
public void append(final SpecificRecord object, final Appendable appendTo) throws IOException {
StringBuilder sb = TMP.get();
sb.setLength(0);
try (AppendableOutputStream bos = new AppendableOutputStream(sb, Charsets.UTF_8)) {
final Schema schema = object.getSchema();
SpecificDatumWriter<SpecificRecord> writer = new SpecificDatumWriter<>(schema);
JsonEncoder jsonEncoder = EF.jsonEncoder(schema, bos);
writer.write(object, jsonEncoder);
jsonEncoder.flush();
} catch (IOException | RuntimeException ex) {
writeSerializationError(object, sb, ex);
}
appendTo.append(sb);
}
use of org.spf4j.io.AppendableOutputStream in project spf4j by zolyfarkas.
the class SpecificRecordAppender method writeSerializationError.
@SuppressFBWarnings("ITC_INHERITANCE_TYPE_CHECKING")
static void writeSerializationError(final Object object, final StringBuilder sb, final Exception ex) throws IOException {
if (STRICT_SERIALIZATION) {
if (ex instanceof IOException) {
throw (IOException) ex;
} else if (ex instanceof RuntimeException) {
throw (RuntimeException) ex;
} else {
throw new IllegalStateException(ex);
}
}
sb.setLength(0);
sb.append("{\"SerializationError\":\n");
try (AppendableOutputStream bos = new AppendableOutputStream(sb, Charsets.UTF_8)) {
JThrowable at = Converters.convert(ex);
Schema schema = at.getSchema();
SpecificDatumWriter<SpecificRecord> writer = new SpecificDatumWriter<>(schema);
JsonEncoder jsonEncoder = EF.jsonEncoder(schema, bos, true);
writer.write(at, jsonEncoder);
jsonEncoder.flush();
}
sb.append(",\n");
sb.append("\"ObjectAsString\":\n\"");
EscapeJsonStringAppendableWrapper escaper = new EscapeJsonStringAppendableWrapper(sb);
escaper.append(object.toString());
sb.append("\"}");
}
Aggregations