Java Code Examples for com.google.protobuf.DynamicMessage#parseFrom()

The following examples show how to use com.google.protobuf.DynamicMessage#parseFrom() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FDBProtobufStorageDescription.java    From sql-layer with GNU Affero General Public License v3.0 7 votes vote down vote up
@Override 
public Row expandRow (FDBStore store, Session session,
                        FDBStoreData storeData, Schema schema) {
    ensureRowConverter();
    DynamicMessage msg;
    try {
        msg = DynamicMessage.parseFrom(rowConverter.getMessageType(), storeData.rawValue);
    } catch (InvalidProtocolBufferException ex) {
        ProtobufReadException nex = new ProtobufReadException(rowDataConverter.getMessageType().getName(), ex.getMessage());
        nex.initCause(ex);
        throw nex;
    }
    Row row = rowConverter.decode(msg);
    row = overlayBlobData(row.rowType(), row, store, session);
    return row;
}
 
Example 2
Source File: DescritporTest.java    From jprotobuf with Apache License 2.0 6 votes vote down vote up
@Test
public void testGetDescriptor() throws IOException {
    Descriptor descriptor2 = AddressBookProtos.AddressBook.getDescriptor();

    FieldDescriptor stringMapFD = descriptor2.findFieldByName("person");
    byte[] bytes = getProtoBytes2();
    DynamicMessage parseFrom = DynamicMessage.parseFrom(descriptor2, bytes);
    Object field = parseFrom.getField(stringMapFD);
    Assert.assertTrue(field instanceof List);
    
    Codec<AddressBookProtosPOJO> codec = ProtobufProxy.create(AddressBookProtosPOJO.class, true);
    Descriptor descriptor = codec.getDescriptor();
    
    stringMapFD = descriptor.findFieldByName("list");

    bytes = getProtoBytes2();

    parseFrom = DynamicMessage.parseFrom(descriptor, bytes);

    Object field2 = parseFrom.getField(stringMapFD);
    Assert.assertTrue(field2 instanceof List);

}
 
Example 3
Source File: ProtobufService.java    From nifi-protobuf-processor with MIT License 6 votes vote down vote up
/**
 * Handle all the logic leading to the decoding of a Protobuf-encoded binary given a schema file path.
 * @param schema  Schema used to decode the binary data
 * @param messageType   Type of Protobuf Message
 * @param encodedData   Encoded data source
 * @return  A JSON representation of the data, contained in a Java String
 * @throws InvalidProtocolBufferException   Thrown when an error occurs during the encoding of the decoded data into JSON
 * @throws Descriptors.DescriptorValidationException    Thrown when the schema is invalid
 * @throws UnknownMessageTypeException  Thrown when the given message type is not contained in the schema
 * @throws MessageDecodingException Thrown when an error occurs during the binary decoding
 * @throws SchemaLoadingException   Thrown when an error occurs while reading the schema file
 */
public static String decodeProtobuf(DynamicSchema schema, String messageType, InputStream encodedData) throws InvalidProtocolBufferException, Descriptors.DescriptorValidationException, UnknownMessageTypeException, MessageDecodingException, SchemaLoadingException {
    Descriptors.Descriptor descriptor;
    DynamicMessage message;

    descriptor = schema.getMessageDescriptor(messageType);

    if (descriptor == null) {
        throw new UnknownMessageTypeException(messageType);
    }

    try {
        message = DynamicMessage.parseFrom(descriptor, encodedData);
    } catch (IOException e) {
        throw new MessageDecodingException(e);
    }

    return JSONMapper.toJSON(message);
}
 
Example 4
Source File: ProtobufKafkaDeserializer.java    From apicurio-registry with Apache License 2.0 6 votes vote down vote up
@Override
protected DynamicMessage readData(byte[] schema, ByteBuffer buffer, int start, int length) {
    try {
        Serde.Schema s = Serde.Schema.parseFrom(schema);
        Descriptors.FileDescriptor fileDescriptor = toFileDescriptor(s);

        byte[] bytes = new byte[length];
        System.arraycopy(buffer.array(), start, bytes, 0, length);
        ByteArrayInputStream is = new ByteArrayInputStream(bytes);

        Serde.Ref ref = Serde.Ref.parseDelimitedFrom(is);

        Descriptors.Descriptor descriptor = fileDescriptor.findMessageTypeByName(ref.getName());
        return DynamicMessage.parseFrom(descriptor, is);
    } catch (IOException | Descriptors.DescriptorValidationException e) {
        throw new IllegalStateException(e);
    }
}
 
Example 5
Source File: DynamicProtoUtil.java    From rejoiner with Apache License 2.0 6 votes vote down vote up
/**
 * Encodes the data portion of an ExecutionResult as ByteString.
 *
 * <p>The FileDescriptorSet must contain a message with the name "{operationName}Response". This
 * message will be populated with data from the execution result and encoded as a ByteString.
 */
public static ByteString encodeResponse(
    String operationName, FileDescriptorSet fileDescriptorSet, ExecutionResult executionResult) {
  try {
    // TODO: Support multiple FileDescriptors in FileDescriptorSet
    FileDescriptor fileDescriptor =
        FileDescriptor.buildFrom(fileDescriptorSet.getFileList().get(0), new FileDescriptor[] {});

    Descriptor messageType = fileDescriptor.findMessageTypeByName(operationName + "Response");

    Message message = DynamicMessage.parseFrom(messageType, ByteString.EMPTY);
    Message responseData = QueryResponseToProto.buildMessage(message, executionResult.getData());

    return responseData.toByteString();
  } catch (DescriptorValidationException | InvalidProtocolBufferException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
  }
}
 
Example 6
Source File: DynamicProtoUtil.java    From rejoiner with Apache License 2.0 5 votes vote down vote up
/**
 * Returns a Map containing data from a ByteString that is parsed using the Proto Descriptor.
 *
 * <p>The FileDescriptorSet must contain a message with the name "{operationName}Request". This
 * message will be used to parse the ByteString, and the resulting message will be transformed and
 * returned as a Map.
 */
public static Map<String, Object> decodeVariables(
    String operationName, FileDescriptorSet fileDescriptorSet, ByteString encodedRequest) {
  try {
    // TODO: Support multiple FileDescriptors in FileDescriptorSet
    FileDescriptor fileDescriptor =
        FileDescriptor.buildFrom(fileDescriptorSet.getFileList().get(0), new FileDescriptor[] {});
    Descriptor messageType = fileDescriptor.findMessageTypeByName(operationName + "Request");
    Message message = DynamicMessage.parseFrom(messageType, encodedRequest);
    return ProtoToMap.messageToMap(message);
  } catch (DescriptorValidationException | InvalidProtocolBufferException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
  }
}
 
Example 7
Source File: SimpleMapTest.java    From jprotobuf with Apache License 2.0 5 votes vote down vote up
@Test
public void testGetDescriptor() throws IOException {
    Codec<SimpleMapPOJO> codec = ProtobufProxy.create(SimpleMapPOJO.class, false);

    Descriptor descriptor = codec.getDescriptor();
    
    String escapeBytes = StringUtils.escapeBytes(descriptor.toProto().toByteArray());
    System.out.println(escapeBytes);

    FieldDescriptor stringMapFD = descriptor.findFieldByName("stringMap");

    byte[] bytes = getProtoBytes2();

    DynamicMessage parseFrom = DynamicMessage.parseFrom(descriptor, bytes);

    Object field = parseFrom.getField(stringMapFD);
    Assert.assertTrue(field instanceof List);
    Assert.assertEquals(2, ((List) field).size());
    
    Descriptor descriptor2 = AddressBookProtos.Person.getDescriptor();
    
    stringMapFD = descriptor2.findFieldByName("stringMap");
    bytes = getProtoBytes2();
    parseFrom = DynamicMessage.parseFrom(descriptor2, bytes);
    field = parseFrom.getField(stringMapFD);
    Assert.assertTrue(field instanceof List);
    Assert.assertEquals(2, ((List) field).size());

}
 
Example 8
Source File: MemoryProtobufStorageDescription.java    From sql-layer with GNU Affero General Public License v3.0 5 votes vote down vote up
@Override
public Row expandRow(MemoryStore store, Session session, MemoryStoreData storeData, Schema schema) {
    ensureRowConverter();
    DynamicMessage msg;
    try {
        msg = DynamicMessage.parseFrom(rowConverter.getMessageType(), storeData.rawValue);
    } catch(InvalidProtocolBufferException ex) {
        ProtobufReadException nex = new ProtobufReadException(rowConverter.getMessageType().getName(), ex.getMessage());
        nex.initCause(ex);
        throw nex;
    }
    return rowConverter.decode(msg);
}
 
Example 9
Source File: ProtobufTranslator.java    From envelope with Apache License 2.0 5 votes vote down vote up
@Override
public Iterable<Row> translate(Row message) throws Exception {
  byte[] value = message.getAs(Translator.VALUE_FIELD_NAME);

  if (value == null || value.length < 1) {
    throw new RuntimeException("Payload value is null or empty");
  }

  DynamicMessage msg;

  BufferedInputStream valueInputStream = new BufferedInputStream(new ByteArrayInputStream(value));

  // Parse into Message
  try {
    // Check if the value is gzipped
    if (ProtobufUtils.isGzipped(valueInputStream)) {
      LOG.trace("Decompressing GZIP byte array");
      msg = DynamicMessage.parseFrom(descriptor, new GZIPInputStream(valueInputStream));
    } else {
      msg = DynamicMessage.parseFrom(descriptor, valueInputStream);
    }
  } catch (InvalidProtocolBufferException ex) {
    throw new RuntimeException("Error while parsing message from descriptor and raw bytes", ex);
  }

  // Populate set of row values matching full schema
  // NOTE: very likely this will be sparse
  List<Object> rowValues = ProtobufUtils.buildRowValues(descriptor, msg, schema);
  Row row = new RowWithSchema(schema, rowValues.toArray());

  return Collections.singletonList(row);
}
 
Example 10
Source File: ProtoAssertTest.java    From curiostack with MIT License 5 votes vote down vote up
@Test
public void testDifferentClasses() throws InvalidProtocolBufferException {
  Message message = parse("o_int: 3");
  DynamicMessage dynamicMessage =
      DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteString());

  assertThat(message).isEqualTo(dynamicMessage);
  assertThat(dynamicMessage).isEqualTo(message);
}
 
Example 11
Source File: MetaDataEvolutionValidatorTestV3.java    From fdb-record-layer with Apache License 2.0 5 votes vote down vote up
/**
 * Validate that it is legal to change the records descriptor from proto2 to proto3 as long as all of the records
 * contained within that file are still the same syntax.
 */
@Test
public void onlyFileProto2ToProto3() throws InvalidProtocolBufferException {
    assertNotEquals(TestRecords1Proto.getDescriptor().getSyntax(), TestRecords1ImportedProto.getDescriptor().getSyntax());
    MetaDataEvolutionValidator.getDefaultInstance().validateUnion(
            TestRecords1Proto.RecordTypeUnion.getDescriptor(),
            TestRecords1ImportedProto.RecordTypeUnion.getDescriptor()
    );
    MetaDataEvolutionValidator.getDefaultInstance().validateUnion(
            TestRecords1ImportedProto.RecordTypeUnion.getDescriptor(),
            TestRecords1Proto.RecordTypeUnion.getDescriptor()
    );

    RecordMetaData metaData1 = RecordMetaData.build(TestRecords1Proto.getDescriptor());
    RecordMetaData metaData2 = replaceRecordsDescriptor(metaData1, TestRecords1ImportedProto.getDescriptor());
    MetaDataEvolutionValidator.getDefaultInstance().validate(metaData1, metaData2);

    // Validate that the nested proto2 records in the proto3 file have proper nullability semantics
    TestRecords1Proto.RecordTypeUnion unionRecordProto2 = TestRecords1Proto.RecordTypeUnion.newBuilder()
            .setMySimpleRecord(TestRecords1Proto.MySimpleRecord.newBuilder().setRecNo(0).setStrValueIndexed(""))
            .build();
    assertThat(unionRecordProto2.getMySimpleRecord().hasNumValue2(), is(false));
    assertThat(unionRecordProto2.getMySimpleRecord().hasStrValueIndexed(), is(true));

    TestRecords1ImportedProto.RecordTypeUnion unionRecordProto3 = TestRecords1ImportedProto.RecordTypeUnion.parseFrom(unionRecordProto2.toByteString());
    assertThat(unionRecordProto3.getMySimpleRecord().hasNumValue2(), is(false));
    assertThat(unionRecordProto3.getMySimpleRecord().hasStrValueIndexed(), is(true));

    final FieldDescriptor unionField = TestRecords1ImportedProto.RecordTypeUnion.getDescriptor().findFieldByName("_MySimpleRecord");
    final FieldDescriptor numValue2Field = TestRecords1Proto.MySimpleRecord.getDescriptor().findFieldByName("num_value_2");
    final FieldDescriptor strValueIndexedField = TestRecords1Proto.MySimpleRecord.getDescriptor().findFieldByName("str_value_indexed");
    DynamicMessage dynamicUnionRecordProto3 = DynamicMessage.parseFrom(TestRecords1ImportedProto.RecordTypeUnion.getDescriptor(), unionRecordProto2.toByteString());
    Message dynamicSimpleRecord = (Message)dynamicUnionRecordProto3.getField(unionField);
    assertThat(dynamicSimpleRecord.hasField(numValue2Field), is(false));
    assertThat(dynamicSimpleRecord.hasField(strValueIndexedField), is(true));
}
 
Example 12
Source File: DynamicMessageRecordSerializer.java    From fdb-record-layer with Apache License 2.0 5 votes vote down vote up
@Nonnull
protected DynamicMessage deserializeFromBytes(@Nonnull Descriptors.Descriptor storedDescriptor,
                                              @Nonnull byte[] serialized) {
    try {
        return DynamicMessage.parseFrom(storedDescriptor, serialized);
    } catch (InvalidProtocolBufferException ex) {
        throw new RecordSerializationException("Error reading from byte array", ex)
                .addLogInfo("recordType", storedDescriptor.getName());
    }
}
 
Example 13
Source File: TemplateEvaluatorTest.java    From flink-statefun with Apache License 2.0 5 votes vote down vote up
private static DynamicMessage dynamic(Message message) {
  try {
    return DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteString());
  } catch (InvalidProtocolBufferException e) {
    throw new AssertionError(e);
  }
}
 
Example 14
Source File: AddressResolverTest.java    From flink-statefun with Apache License 2.0 5 votes vote down vote up
private static DynamicMessage dynamic(Message message) {
  try {
    return DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteString());
  } catch (InvalidProtocolBufferException e) {
    throw new AssertionError(e);
  }
}
 
Example 15
Source File: TemplateEvaluatorTest.java    From stateful-functions with Apache License 2.0 5 votes vote down vote up
private static DynamicMessage dynamic(Message message) {
  try {
    return DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteString());
  } catch (InvalidProtocolBufferException e) {
    throw new AssertionError(e);
  }
}
 
Example 16
Source File: AddressResolverTest.java    From stateful-functions with Apache License 2.0 5 votes vote down vote up
private static DynamicMessage dynamic(Message message) {
  try {
    return DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteString());
  } catch (InvalidProtocolBufferException e) {
    throw new AssertionError(e);
  }
}
 
Example 17
Source File: ProtoLanguageFileWriter.java    From metastore with Apache License 2.0 5 votes vote down vote up
private Object convertFieldValue(Descriptors.FieldDescriptor fieldDescriptor, Object value) {
  switch (fieldDescriptor.getType()) {
    case MESSAGE:
      try {
        DynamicMessage dynamicMessage =
            DynamicMessage.parseFrom(fieldDescriptor.getMessageType(), (ByteString) value);
        return dynamicMessage;
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    case BOOL:
      return value.equals(1L);
    case ENUM:
    case STRING:
      ByteString byteString = (ByteString) value;
      return byteString.toStringUtf8();
    case INT32:
    case INT64:
      return unsignedToString((Long) value);
    case DOUBLE:
      return Double.longBitsToDouble((Long) value);
    case FLOAT:
      return Float.intBitsToFloat((Integer) value);
  }
  throw new RuntimeException(
      "conversion of unknownfield for type "
          + fieldDescriptor.getType().toString()
          + " not implemented");
}
 
Example 18
Source File: FDBRecordStoreNullQueryTest.java    From fdb-record-layer with Apache License 2.0 4 votes vote down vote up
@Test
public void testCompareSerialization() throws Exception {
    final TestRecordsNulls2Proto.MyNullRecord emptyProto2 = buildRecord2("record", null, null);
    final TestRecordsNulls3Proto.MyNullRecord emptyProto3 = buildRecord3("record", null, null);
    final DynamicMessage emptyDynamic2 = buildRecord2Dynamic("record", null, null);
    final DynamicMessage emptyDynamic3 = buildRecord3Dynamic("record", null, null);

    final TestRecordsNulls2Proto.MyNullRecord defaultProto2 = buildRecord2("record", 0, "");
    final TestRecordsNulls3Proto.MyNullRecord defaultProto3 = buildRecord3("record", 0, "");
    final DynamicMessage defaultDynamic2 = buildRecord2Dynamic("record", 0, "");
    final DynamicMessage defaultDynamic3 = buildRecord3Dynamic("record", 0, "");

    final TestRecordsNulls2Proto.MyNullRecord oneProto2 = buildRecord2("record", 1, "A");
    final TestRecordsNulls3Proto.MyNullRecord oneProto3 = buildRecord3("record", 1, "A");
    final DynamicMessage oneDynamic2 = buildRecord2Dynamic("record", 1, "A");
    final DynamicMessage oneDynamic3 = buildRecord3Dynamic("record", 1, "A");

    checkHasField(emptyProto2, emptyProto3, emptyDynamic2, emptyDynamic3,
            defaultProto2, defaultProto3, defaultDynamic2, defaultDynamic3,
            oneProto2, oneProto3, oneDynamic2, oneDynamic3);

    final byte[] emptySerialized = emptyProto2.toByteArray();
    assertThat("empty serialized from proto3 should be the same as proto2", emptyProto3.toByteArray(), equalTo(emptySerialized));
    assertThat("empty serialized from dynamic2 should be the same as proto2", emptyDynamic2.toByteArray(), equalTo(emptySerialized));
    assertThat("empty serialized from dynamic3 should be the same as proto2", emptyDynamic3.toByteArray(), equalTo(emptySerialized));

    final byte[] defaultSerialized = defaultProto2.toByteArray();
    assertThat("empty and default serialized by proto2 should differ", defaultSerialized, not(equalTo(emptySerialized)));
    assertThat("default serialized from dynamic2 should be the same as proto2", defaultDynamic2.toByteArray(), equalTo(defaultSerialized));
    if (isProto3()) {
        // Fields set to default cannot be distinguished from cleared, so not serialized.
        assertThat("default serialized from proto3 should be the same as proto2 empty", defaultProto3.toByteArray(), equalTo(emptySerialized));
        assertThat("default serialized from dynamic3 should be the same as proto2 empty", defaultDynamic3.toByteArray(), equalTo(emptySerialized));
    } else {
        assertThat("default serialized from proto3 should be the same as proto2", defaultProto3.toByteArray(), equalTo(defaultSerialized));
        assertThat("default serialized from dynamic3 should be the same as proto2", defaultDynamic3.toByteArray(), equalTo(defaultSerialized));
    }

    final byte[] oneSerialized = oneProto2.toByteArray();
    assertThat("empty and one serialized by proto2 should differ", oneSerialized, not(equalTo(emptySerialized)));
    assertThat("one serialized from proto3 should be the same as proto2", oneProto3.toByteArray(), equalTo(oneSerialized));
    assertThat("one serialized from dynamic2 should be the same as proto2", oneDynamic2.toByteArray(), equalTo(oneSerialized));
    assertThat("one serialized from dynamic3 should be the same as proto2", oneDynamic3.toByteArray(), equalTo(oneSerialized));

    final TestRecordsNulls2Proto.MyNullRecord emptyProto2x = TestRecordsNulls2Proto.MyNullRecord.parseFrom(emptySerialized);
    final TestRecordsNulls3Proto.MyNullRecord emptyProto3x = TestRecordsNulls3Proto.MyNullRecord.parseFrom(emptySerialized);
    final DynamicMessage emptyDynamic2x = DynamicMessage.parseFrom(TestRecordsNulls2Proto.MyNullRecord.getDescriptor(), emptySerialized);
    final DynamicMessage emptyDynamic3x = DynamicMessage.parseFrom(TestRecordsNulls3Proto.MyNullRecord.getDescriptor(), emptySerialized);

    final TestRecordsNulls2Proto.MyNullRecord defaultProto2x = TestRecordsNulls2Proto.MyNullRecord.parseFrom(defaultSerialized);
    final TestRecordsNulls3Proto.MyNullRecord defaultProto3x = TestRecordsNulls3Proto.MyNullRecord.parseFrom(defaultSerialized);
    final DynamicMessage defaultDynamic2x = DynamicMessage.parseFrom(TestRecordsNulls2Proto.MyNullRecord.getDescriptor(), defaultSerialized);
    final DynamicMessage defaultDynamic3x = DynamicMessage.parseFrom(TestRecordsNulls3Proto.MyNullRecord.getDescriptor(), defaultSerialized);

    final TestRecordsNulls2Proto.MyNullRecord oneProto2x = TestRecordsNulls2Proto.MyNullRecord.parseFrom(oneSerialized);
    final TestRecordsNulls3Proto.MyNullRecord oneProto3x = TestRecordsNulls3Proto.MyNullRecord.parseFrom(oneSerialized);
    final DynamicMessage oneDynamic2x = DynamicMessage.parseFrom(TestRecordsNulls2Proto.MyNullRecord.getDescriptor(), oneSerialized);
    final DynamicMessage oneDynamic3x = DynamicMessage.parseFrom(TestRecordsNulls3Proto.MyNullRecord.getDescriptor(), oneSerialized);

    checkHasField(emptyProto2x, emptyProto3x, emptyDynamic2x, emptyDynamic3x,
            defaultProto2x, defaultProto3x, defaultDynamic2x, defaultDynamic3x,
            oneProto2x, oneProto3x, oneDynamic2x, oneDynamic3x);

}
 
Example 19
Source File: TestProtobufUtilsConversion.java    From envelope with Apache License 2.0 4 votes vote down vote up
@BeforeClass
public static void createMessages() throws IOException {
  ProtobufSingleMessage.SingleExample msg = ProtobufSingleMessage.SingleExample.newBuilder()
      .setString("foo")
      .setDouble(123.456D)
      .setFloat(123.456F)
      .setInt32(123)
      .setInt64(123L)
      .setUint32(123)
      .setUint64(123L)
      .setSint32(123)
      .setSint64(123L)
      .setFixed32(123)
      .setFixed64(123L)
      .setSfixed32(123)
      .setSfixed64(123L)
      .setBoolean(true)
      .setBytes(ByteString.copyFromUtf8("foo"))
      .setEnum(ProtobufSingleMessage.SingleExample.EnumExample.THREE)
      .setNested(ProtobufSingleMessage.SingleExample.NestedExample.newBuilder()
        .setNested("single")
      )
      .putMapInt("first", 1)
      .putMapInt("second", 2)
      .addRepeatingMessage(ProtobufSingleMessage.SingleExample.NestedExample.newBuilder()
          .setNested("repeated 1")
      )
      .addRepeatingMessage(ProtobufSingleMessage.SingleExample.NestedExample.newBuilder()
          .setNested("repeated 2")
      )
      .addRepeatingInt32(567)
      .addRepeatingInt32(890)
      .addRepeatingEnum(ProtobufSingleMessage.SingleExample.EnumExample.ONE)
      .addRepeatingEnum(ProtobufSingleMessage.SingleExample.EnumExample.TWO)
      .build();

  try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
    msg.writeTo(outputStream);
    message = DynamicMessage.parseFrom(SINGLE_DESC, outputStream.toByteArray());
  }
}
 
Example 20
Source File: ProtoDynamicMessageSchemaTest.java    From beam with Apache License 2.0 4 votes vote down vote up
private DynamicMessage toDynamic(Message message) throws InvalidProtocolBufferException {
  return DynamicMessage.parseFrom(message.getDescriptorForType(), message.toByteArray());
}