in avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageEncoder.java [53:89]
public int getEncodedSize(T message) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
// Need to check for writer
if(message instanceof GenericRecord) {
DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(message.getSchema());
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
try {
writer.write((GenericRecord)message, encoder);
encoder.flush();
byte[] encoded = out.toByteArray();
encodedMessage = ByteBuffer.wrap(encoded);
out.close();
} catch (IOException ioEx) {
LOG.error("error while marshalling", ioEx);
throw new ProtocolEncoderException(ioEx.getMessage());
}
} else if (message instanceof SpecificRecord) {
DatumWriter<T> writer = new SpecificDatumWriter<T>(message.getSchema());
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
try {
writer.write(message, encoder);
encoder.flush();
byte[] encoded = out.toByteArray();
encodedMessage = ByteBuffer.wrap(encoded);
out.close();
} catch (IOException ioEx) {
LOG.error("error while marshalling", ioEx);
throw new ProtocolEncoderException(ioEx.getMessage());
}
} else {
LOG.warn("Unknown object type, serialization method not known for {}", message.getClass());
throw new ProtocolEncoderException(message.getClass() + " cannot be Serialized");
}
return encodedMessage != null ? encodedMessage.capacity() : -1;
}