下面列出了io.grpc.Metadata#BinaryMarshaller ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* A metadata marshaller that encodes objects as protobuf according to their proto IDL specification.
*
* @param clazz the type to serialize
* @param <T>
*/
public static <T extends GeneratedMessageV3> Metadata.BinaryMarshaller<T> PROTOBUF_MARSHALLER(Class<T> clazz) {
try {
Method defaultInstance = clazz.getMethod("getDefaultInstance");
GeneratedMessageV3 instance = (GeneratedMessageV3) defaultInstance.invoke(null);
return new Metadata.BinaryMarshaller<T>() {
@Override
public byte[] toBytes(T value) {
return value.toByteArray();
}
@SuppressWarnings("unchecked")
@Override
public T parseBytes(byte[] serialized) {
try {
return (T) instance.getParserForType().parseFrom(serialized);
} catch (InvalidProtocolBufferException ipbe) {
throw new IllegalArgumentException(ipbe);
}
}
};
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
throw new IllegalStateException(ex);
}
}
@Test
public void metadataMarshaller_invalid() {
Metadata.BinaryMarshaller<Type> metadataMarshaller =
ProtoLiteUtils.metadataMarshaller(Type.getDefaultInstance());
try {
metadataMarshaller.parseBytes(new byte[] {-127});
fail("Expected exception");
} catch (IllegalArgumentException ex) {
assertNotNull(((InvalidProtocolBufferException) ex.getCause()).getUnfinishedMessage());
}
}
private static Metadata.BinaryMarshaller<String> utf8Marshaller() {
return new Metadata.BinaryMarshaller<String>() {
@Override
public byte[] toBytes(String value) {
return value.getBytes(Charsets.UTF_8);
}
@Override
public String parseBytes(byte[] serialized) {
return new String(serialized, Charsets.UTF_8);
}
};
}
@Test
public void protobufMarshallerRoundtrip() {
HelloRequest request = HelloRequest.newBuilder().setName("World").build();
Metadata.BinaryMarshaller<HelloRequest> marshaller = MoreMetadata.PROTOBUF_MARSHALLER(HelloRequest.class);
byte[] bytes = marshaller.toBytes(request);
HelloRequest request2 = marshaller.parseBytes(bytes);
assertThat(request2).isEqualTo(request);
}
@Test
public void metadataMarshaller_invalid() {
Metadata.BinaryMarshaller<Type> metadataMarshaller =
ProtoLiteUtils.metadataMarshaller(Type.getDefaultInstance());
try {
metadataMarshaller.parseBytes(new byte[] {-127});
fail("Expected exception");
} catch (IllegalArgumentException ex) {
assertNotNull(((InvalidProtocolBufferException) ex.getCause()).getUnfinishedMessage());
}
}
@Test
public void metadataMarshaller_roundtrip() {
Metadata.BinaryMarshaller<Type> metadataMarshaller =
ProtoLiteUtils.metadataMarshaller(Type.getDefaultInstance());
assertEquals(proto, metadataMarshaller.parseBytes(metadataMarshaller.toBytes(proto)));
}
@Test
public void metadataMarshaller_roundtrip() {
Metadata.BinaryMarshaller<Type> metadataMarshaller =
ProtoLiteUtils.metadataMarshaller(Type.getDefaultInstance());
assertEquals(proto, metadataMarshaller.parseBytes(metadataMarshaller.toBytes(proto)));
}
/**
* Produce a metadata marshaller for a protobuf type.
*
* @since 1.13.0
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/4477")
public static <T extends Message> Metadata.BinaryMarshaller<T> metadataMarshaller(T instance) {
return ProtoLiteUtils.metadataMarshaller(instance);
}
/**
* Produce a metadata marshaller for a protobuf type.
*
* @since 1.0.0
*/
public static <T extends MessageLite> Metadata.BinaryMarshaller<T> metadataMarshaller(
T defaultInstance) {
return new MetadataMarshaller<T>(defaultInstance);
}
/**
* Produce a metadata marshaller for a protobuf type.
*
* @since 1.13.0
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/4477")
public static <T extends Message> Metadata.BinaryMarshaller<T> metadataMarshaller(T instance) {
return ProtoLiteUtils.metadataMarshaller(instance);
}
/**
* Produce a metadata marshaller for a protobuf type.
*
* @since 1.0.0
*/
public static <T extends MessageLite> Metadata.BinaryMarshaller<T> metadataMarshaller(
T defaultInstance) {
return new MetadataMarshaller<>(defaultInstance);
}