public int getEncodedSize()

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;
    }