public class MessageTransportHeaders extends Object implements UtlPool.Item<MessageTransportHeaders>, XIterator<MessageTransportHeaders.Header>, Iterable<MessageTransportHeaders.Header>
This class is used to hold a list of message transport headers and provides efficient iteration and serialization for them.
toMap()
method to retrieve a map representation of the transport
headers, which provides a mechanism for working with transport headers the map
will contain a String key for each header and the (possibly autoboxed) value of the header.
MessageTransportHeaders transportHeaders = message.getMetadata().getTransportHeadersMap(); Long sequenceNumber = transportHeaders.get("msgid"); String wireChannel = transportHeaders.get("rcvdChannel");
MessageTransportHeaders.Header
objects.
MessageTransportHeaders transportHeaders = message.getMetadata().getTransportHeaders(); if(transportHeaders != null) { for(Header header : transportHeaders) { if(header.getNameUnsafe().compareTo("SomeHeader") == 0) { if(header.getType() == HeaderType.String) { XString headerValue = header.getStringValueUnsafe(); // header.getStringValueUnsafe() and header.getNameUnsafe() must not be mutated. } else if (header.getType() == HeaderType.Long) { long val = header.getLongValue(); // do something. } } } }MessageTransportHeaders implements Iterable
Bytes | Description | |||
---|---|---|---|---|
Fixed Length Portion | ||||
0 | Version (1) | |||
1-4 | Serialized Length. The length of the encoded transport headers inclusive of fixed length and variable length values described here. | |||
Variable Length Portion Each map entry is written as key folllowed by a value as follows:
|
||||
keyLen1 (2 bytes) | key (keyLen1 bytes) | type1 (1 byte) | >valueLen1 (2 bytes ... only if variable length) | value (valueLen1 bytes) |
keyLen2 (2 bytes) | key (keyLen2 bytes) | type2 (1 byte) | >valueLen2 (2 bytes ... only if variable length) | value (valueLen2 bytes) |
keyLenN (2 bytes) | key (keyLenN bytes) | typeN (1 byte) | >valueLenN (2 bytes ... only if variable length) | value (valueLenN bytes) |
Modifier and Type | Class and Description |
---|---|
class |
MessageTransportHeaders.Header
Represent a message transport header name/value pair.
|
static class |
MessageTransportHeaders.HeaderType
Enumerates possible header types.
|
Modifier and Type | Method and Description |
---|---|
void |
addHeader(CharSequence name,
boolean value)
Adds the provided boolean transport header.
|
void |
addHeader(CharSequence name,
byte value)
Adds the provided byte transport header.
|
void |
addHeader(CharSequence name,
byte[] src,
int srcOffset,
int length)
Adds the provided byte[] transport header.
|
void |
addHeader(CharSequence name,
char value)
Adds the provided char transport header.
|
void |
addHeader(CharSequence name,
CharSequence value)
Adds the provided String transport header.
|
void |
addHeader(CharSequence name,
double value)
Adds the provided double transport header.
|
void |
addHeader(CharSequence name,
float value)
Adds the provided float transport header.
|
void |
addHeader(CharSequence name,
int value)
Adds the provided int transport header.
|
void |
addHeader(CharSequence name,
com.neeve.io.IOBuffer src,
int srcOffset,
int length)
Adds the provided IOBuffer as a binary transport header.
|
void |
addHeader(CharSequence name,
long value)
Adds the provided long transport header.
|
MessageTransportHeaders |
addHeader(CharSequence name,
Object value)
Adds the provided header if it is of a supported data type.
|
void |
addHeader(CharSequence name,
short value)
Adds the provided short transport header.
|
void |
addHeader(XString name,
boolean value)
Adds the provided boolean transport header.
|
void |
addHeader(XString name,
byte value)
Adds the provided byte transport header.
|
void |
addHeader(XString name,
byte[] src,
int srcOffset,
int length)
Adds the provided byte [] as a binary transport header.
|
void |
addHeader(XString name,
char value)
Adds the provided char transport header.
|
void |
addHeader(XString name,
double value)
Adds the provided double transport header.
|
void |
addHeader(XString name,
float value)
Adds the provided float transport header.
|
void |
addHeader(XString name,
int value)
Adds the provided int transport header.
|
void |
addHeader(XString name,
com.neeve.io.IOBuffer src,
int srcOffset,
int length)
Adds the provided IOBuffer as a binary transport header.
|
void |
addHeader(XString name,
long value)
Adds the provided long transport header.
|
MessageTransportHeaders |
addHeader(XString name,
Object value)
Adds the provided header if it is of a supported data type.
|
void |
addHeader(XString name,
short value)
Adds the provided short transport header.
|
void |
addHeader(XString name,
String value)
Adds the provided transport header.
|
void |
addHeader(XString name,
XString value)
Adds the provided transport header.
|
MessageTransportHeaders |
copy()
Creates a copy of this object.
|
static MessageTransportHeaders |
create()
Creates an empty set of
MessageTransportHeaders . |
int |
deserialize(ByteBuffer src)
Deserializes transport headers from a give source buffer.
|
int |
deserialize(com.neeve.io.IOBuffer src,
int offset)
Deserializes transport headers from a give source buffer.
|
int |
deserialize(com.neeve.io.IOElasticBuffer src,
int offset)
Deserializes transport headers from a give source buffer.
|
void |
dispose()
Returns this
MessageTransportHeaders to its pool. |
void |
getAllTo(Map<String,Object> to)
Add all of the headers to the provided map.
|
static short |
getLatestVersion()
Get the latest transport headers version.
|
UtlPool<MessageTransportHeaders> |
getPool()
Get a pool item's pool.
|
static int |
getSerializedLength(com.neeve.io.IOBuffer buffer,
int offset)
Determines the serialized length of message transport headers that are serialized in a given buffer.
|
static int |
getSerializedLength(com.neeve.io.IOElasticBuffer buffer,
int offset)
Determines the serialized length of message transport headers that are serialized in a given buffer.
|
Object |
getValue(String key)
Iterates through the headers and returns the matching header value if present.
|
boolean |
hasNext() |
MessageTransportHeaders |
init()
Initialize an item.
|
boolean |
isReadOnly()
Tests if the transport headers are readonly.
|
Iterator<MessageTransportHeaders.Header> |
iterator()
Returns these headers as an iterator.
|
static void |
main(String[] args) |
MessageTransportHeaders.Header |
next()
Invalidates any previously returned
MessageTransportHeaders.Header and returns the next header. |
void |
remove()
Remove is not supported for this iterator.
|
int |
serialize(ByteBuffer dest)
Serializes transport headers to a given ByteBuffer
|
int |
serialize(com.neeve.io.IOBuffer dest,
int offset)
Serializes transport headers to a given IOBuffer
|
int |
serialize(com.neeve.io.IOElasticBuffer dest,
int offset)
Serializes transport headers to a given IOElasticBuffer
|
int |
serializedLength()
Returns the serialized length of this
MessageTransportHeaders . |
MessageTransportHeaders |
setPool(UtlPool<MessageTransportHeaders> pool)
Set a pool item's pool.
|
XIterator<MessageTransportHeaders.Header> |
toFirst()
Reset the
MessageTransportHeaders.Header iterator view to the first Header position. |
void |
toJsonString(boolean indent,
int indentDepth,
boolean noSpaces,
StringBuilder sb)
Writes transport headers as a json string.
|
void |
toJsonString(StringBuilder sb)
Writes transport headers as a json string.
|
Map<String,Object> |
toMap()
Return all of the transport headers in a map.
|
String |
toString() |
public static final short getLatestVersion()
public static MessageTransportHeaders create()
MessageTransportHeaders
.public boolean isReadOnly()
public final int serializedLength()
MessageTransportHeaders
.MessageTransportHeaders
.public final int deserialize(com.neeve.io.IOElasticBuffer src, int offset)
src
- The source buffer from which to deserialize.offset
- The offset in the source buffeer from which to deserialize.public final int deserialize(com.neeve.io.IOBuffer src, int offset)
src
- The source buffer from which to deserialize.offset
- The offset in the source buffeer from which to deserialize.public final int deserialize(ByteBuffer src)
src
- The source buffer from which to deserialize.public final int serialize(com.neeve.io.IOBuffer dest, int offset)
dest
- The buffer into which to serialize the headersoffset
- The offset into the dest buffer at which to serialize.public final int serialize(com.neeve.io.IOElasticBuffer dest, int offset)
dest
- The buffer into which to serialize the headersoffset
- The offset into the dest buffer at which to serialize.public final int serialize(ByteBuffer dest)
dest
- The buffer into which to serialize the headerspublic static final int getSerializedLength(com.neeve.io.IOElasticBuffer buffer, int offset)
buffer
- The buffer holding serialized message transport headers.offset
- The offset into the buffer.public static final int getSerializedLength(com.neeve.io.IOBuffer buffer, int offset)
buffer
- The buffer holding serialized message transport headers.offset
- The offset into the buffer.public final MessageTransportHeaders copy()
public final boolean hasNext()
hasNext
in interface Iterator<MessageTransportHeaders.Header>
public final MessageTransportHeaders.Header next()
MessageTransportHeaders.Header
and returns the next header.
Additionally, it if very important to note that each returned header
is only valid until the next call is made to next()
because
the same MessageTransportHeaders.Header
instance is reused during the iteration.
next
in interface Iterator<MessageTransportHeaders.Header>
public final void remove()
remove
in interface Iterator<MessageTransportHeaders.Header>
public final XIterator<MessageTransportHeaders.Header> toFirst()
MessageTransportHeaders.Header
iterator view to the first Header position.toFirst
in interface XIterator<MessageTransportHeaders.Header>
MessageTransportHeaders.Header
iterator reset to the first header.public final Iterator<MessageTransportHeaders.Header> iterator()
Note that this operation does not allocate a new iterator,
but instead just returns this object after calling toFirst()
.
Additionally, it if very important to note that each returned headers
is only valid until the next call is made to next()
because
the same Header instance is reused during the iteration.
iterator
in interface Iterable<MessageTransportHeaders.Header>
public final void addHeader(CharSequence name, byte value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, boolean value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, char value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, short value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, int value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, float value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, long value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, double value)
name
- The header name.value
- The header value.public final void addHeader(XString name, byte value)
name
- The header name.value
- The header value.public final void addHeader(XString name, boolean value)
name
- The header name.value
- The header value.public final void addHeader(XString name, char value)
name
- The header name.value
- The header value.public final void addHeader(XString name, short value)
name
- The header name.value
- The header value.public final void addHeader(XString name, int value)
name
- The header name.value
- The header value.public final void addHeader(XString name, float value)
name
- The header name.value
- The header value.public final void addHeader(XString name, long value)
name
- The header name.value
- The header value.public final void addHeader(XString name, double value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, CharSequence value)
name
- The header name.value
- The header value.public final void addHeader(CharSequence name, byte[] src, int srcOffset, int length)
name
- The header name.src
- The header value.srcOffset
- The offeset into the buffer from which to copy.length
- The number of bytes to copy.public final void addHeader(CharSequence name, com.neeve.io.IOBuffer src, int srcOffset, int length)
name
- The header name.src
- The header value.srcOffset
- The offeset into the buffer from which to copy.length
- The number of bytes to copy.public MessageTransportHeaders addHeader(CharSequence name, Object value)
name
- the header name.value
- the header value.NullPointerException
- if name or value is null.IllegalArgumentException
- if the value type is unsupported.public MessageTransportHeaders addHeader(XString name, Object value)
name
- the header name.value
- the header value.NullPointerException
- if name or value is null.IllegalArgumentException
- if the value type is unsupported.public final void addHeader(XString name, XString value)
name
- The header name.value
- The header value.public final void addHeader(XString name, String value)
name
- The header name.value
- The header value.public final void addHeader(XString name, com.neeve.io.IOBuffer src, int srcOffset, int length)
name
- The header name.src
- The header value.srcOffset
- The offeset into the buffer from which to copy.length
- The number of bytes to copy.IllegalArgumentException
- if the provided length is greater than Short.MAX_VALUE
public final void addHeader(XString name, byte[] src, int srcOffset, int length)
name
- The header name.src
- The header value.srcOffset
- The offeset into the buffer from which to copy.length
- The number of bytes to copy.IllegalArgumentException
- if the provided length is greater than Short.MAX_VALUE
public Map<String,Object> toMap()
Notes:
MessageTransportHeaders
are not reflected in the returned map.
public void getAllTo(Map<String,Object> to)
Note: this is not a zero garbage operation
to
- the Map into which to add all of the headers.public Object getValue(String key)
Note: this is not a zero garbage operation
key
- The key to seach for.public final void dispose()
MessageTransportHeaders
to its pool.public final MessageTransportHeaders init()
UtlPool.Item
This method is invoked by an item pool very time an item is put into the pool. The method should wipe the contents of the item so as to present a fresh instance of the item to the caller when retrieved from the pool.
init
in interface UtlPool.Item<MessageTransportHeaders>
public final MessageTransportHeaders setPool(UtlPool<MessageTransportHeaders> pool)
UtlPool.Item
This method is invoked by an item pool at the time an item is added to the pool. The intent is to record the item's source pool in the item so it can be disposed back into the pool when the user is done working with it.
setPool
in interface UtlPool.Item<MessageTransportHeaders>
public final UtlPool<MessageTransportHeaders> getPool()
UtlPool.Item
This method should return the pool set using UtlPool.Item.setPool(com.neeve.util.UtlPool<T>)
getPool
in interface UtlPool.Item<MessageTransportHeaders>
UtlPool.Item.setPool(com.neeve.util.UtlPool<T>)
public String toString()
public void toJsonString(StringBuilder sb)
If the XRuntime
value "nv.indent.json" is true, the value is pretty printed.
sb
- The builder to write json to.public void toJsonString(boolean indent, int indentDepth, boolean noSpaces, StringBuilder sb)
indent
- If true pretty print with newlines and a 2 space indent.indentDepth
- The the indent depth to prefix for each line.noSpaces
- When true, no spaces are inserted between key/value pairs.sb
- The builder to append to.public static void main(String[] args)
Copyright © 2019 Neeve Research, LLC. All Rights Reserved.