@NotThreadSafe public final class Metadata extends Object
Keys are allowed to be associated with more than one value.
This class is not thread safe, implementations should ensure that header reads and writes do not occur in multiple threads concurrently.
Modifier and Type | Class and Description |
---|---|
static interface |
Metadata.AsciiMarshaller<T>
Marshaller for metadata values that are serialized into ASCII strings.
|
static interface |
Metadata.BinaryMarshaller<T>
Marshaller for metadata values that are serialized into raw binary.
|
static interface |
Metadata.BinaryStreamMarshaller<T>
Marshaller for metadata values that are serialized to an InputStream.
|
static class |
Metadata.Key<T>
Key for metadata entries.
|
Modifier and Type | Field and Description |
---|---|
static Metadata.AsciiMarshaller<String> |
ASCII_STRING_MARSHALLER
Simple metadata marshaller that encodes strings as is.
|
static Metadata.BinaryMarshaller<byte[]> |
BINARY_BYTE_MARSHALLER
Simple metadata marshaller that encodes bytes as is.
|
static String |
BINARY_HEADER_SUFFIX
All binary headers should have this suffix in their names.
|
Constructor and Description |
---|
Metadata()
Constructor called by the application layer when it wants to send metadata.
|
Modifier and Type | Method and Description |
---|---|
boolean |
containsKey(Metadata.Key<?> key)
Returns true if a value is defined for the given key.
|
<T> void |
discardAll(Metadata.Key<T> key)
Remove all values for the given key without returning them.
|
<T> T |
get(Metadata.Key<T> key)
Returns the last metadata entry added with the name 'name' parsed as T.
|
<T> Iterable<T> |
getAll(Metadata.Key<T> key)
Returns all the metadata entries named 'name', in the order they were received, parsed as T, or
null if there are none.
|
Set<String> |
keys()
Returns set of all keys in store.
|
void |
merge(Metadata other)
Perform a simple merge of two sets of metadata.
|
void |
merge(Metadata other,
Set<Metadata.Key<?>> keys)
Merge values from the given set of keys into this set of metadata.
|
<T> void |
put(Metadata.Key<T> key,
T value)
Adds the
key, value pair. |
<T> boolean |
remove(Metadata.Key<T> key,
T value)
Removes the first occurrence of
value for key . |
<T> Iterable<T> |
removeAll(Metadata.Key<T> key)
Remove all values for the given key.
|
String |
toString() |
public static final String BINARY_HEADER_SUFFIX
Its value is "-bin"
. An ASCII header's name must not end with this.
public static final Metadata.BinaryMarshaller<byte[]> BINARY_BYTE_MARSHALLER
This should be used when raw bytes are favored over un-serialized version of object. Can be helpful in situations where more processing to bytes is needed on application side, avoids double encoding/decoding.
Both Metadata.BinaryMarshaller.toBytes(T)
and Metadata.BinaryMarshaller.parseBytes(byte[])
methods do not
return a copy of the byte array. Do _not_ modify the byte arrays of either the arguments or
return values.
public static final Metadata.AsciiMarshaller<String> ASCII_STRING_MARSHALLER
This should be used with ASCII strings that only contain the characters listed in the class
comment of Metadata.AsciiMarshaller
. Otherwise the output may be considered invalid and
discarded by the transport, or the call may fail.
public Metadata()
public boolean containsKey(Metadata.Key<?> key)
This is done by linear search, so if it is followed by get(io.grpc.Metadata.Key<T>)
or getAll(io.grpc.Metadata.Key<T>)
,
prefer calling them directly and checking the return value against null
.
@Nullable public <T> T get(Metadata.Key<T> key)
@Nullable public <T> Iterable<T> getAll(Metadata.Key<T> key)
public <T> void put(Metadata.Key<T> key, T value)
key, value
pair. If key
already has values, value
is added to
the end. Duplicate values for the same key are permitted.NullPointerException
- if key or value is nullpublic <T> boolean remove(Metadata.Key<T> key, T value)
value
for key
.key
- key for valuevalue
- valuetrue
if value
removed; false
if value
was not presentNullPointerException
- if key
or value
is nullpublic <T> Iterable<T> removeAll(Metadata.Key<T> key)
null
is returned.@ExperimentalApi(value="https://github.com/grpc/grpc-java/issues/4691") public <T> void discardAll(Metadata.Key<T> key)
public void merge(Metadata other)
This is a purely additive operation, because a single key can be associated with multiple values.
public void merge(Metadata other, Set<Metadata.Key<?>> keys)
other
- The source of the new key values.keys
- The subset of matching key we want to copy, if they exist in the source.