Beispiel #1
0
  @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);
  }
Beispiel #2
0
  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"));
  }