@SuppressWarnings({"rawtypes", "unchecked"}) public Future<Void> sendObjectViaFuture(Object data) { assertMessageNotNull(data); if (LOG.isDebugEnabled()) { LOG.debug("sendObject({})", data); } Encoder encoder = encoders.getEncoderFor(data.getClass()); if (encoder == null) { throw new IllegalArgumentException("No encoder for type: " + data.getClass()); } if (encoder instanceof Encoder.Text) { Encoder.Text etxt = (Encoder.Text) encoder; try { String msg = etxt.encode(data); return jettyRemote.sendStringByFuture(msg); } catch (EncodeException e) { return new EncodeFailedFuture(data, etxt, Encoder.Text.class, e); } } else if (encoder instanceof Encoder.TextStream) { Encoder.TextStream etxt = (Encoder.TextStream) encoder; FutureWriteCallback callback = new FutureWriteCallback(); try (MessageWriter writer = new MessageWriter(session)) { writer.setCallback(callback); etxt.encode(data, writer); return callback; } catch (EncodeException | IOException e) { return new EncodeFailedFuture(data, etxt, Encoder.Text.class, e); } } else if (encoder instanceof Encoder.Binary) { Encoder.Binary ebin = (Encoder.Binary) encoder; try { ByteBuffer buf = ebin.encode(data); return jettyRemote.sendBytesByFuture(buf); } catch (EncodeException e) { return new EncodeFailedFuture(data, ebin, Encoder.Binary.class, e); } } else if (encoder instanceof Encoder.BinaryStream) { Encoder.BinaryStream ebin = (Encoder.BinaryStream) encoder; FutureWriteCallback callback = new FutureWriteCallback(); try (MessageOutputStream out = new MessageOutputStream(session)) { out.setCallback(callback); ebin.encode(data, out); return callback; } catch (EncodeException | IOException e) { return new EncodeFailedFuture(data, ebin, Encoder.Binary.class, e); } } throw new IllegalArgumentException("Unknown encoder type: " + encoder); }
public void serializeGeneric() throws IOException { // Create a datum to serialize. Schema schema = new Schema.Parser().parse(getClass().getResourceAsStream("/MyPair.avsc")); GenericRecord datum = new GenericData.Record(schema); datum.put("left", new Utf8("dog")); datum.put("right", new Utf8("cat")); // Serialize it. ByteArrayOutputStream out = new ByteArrayOutputStream(); DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema); Encoder encoder = EncoderFactory.get().binaryEncoder(out, null); writer.write(datum, encoder); encoder.flush(); out.close(); System.out.println("Serialization: " + out); // Deserialize it. DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(schema); BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(out.toByteArray(), null); GenericRecord result = reader.read(null, decoder); System.out.printf("Left: %s, Right: %s\n", result.get("left"), result.get("right")); }