ICE SBE Sample
Description
This sample illustrates how to access standard and non-standard message header fields.
Source Code
import biz.onixs.sbe.*;
import biz.onixs.sbe.def.MessageSchema;
import net.sf.practicalxml.ParseUtil;
import org.w3c.dom.Document;
import java.io.File;
import java.math.BigInteger;
/**
* Main sample class.
*/
public class ICESample {
int blockLengthID;
int templateIdID;
int sequenceIdID;
int sendTimeID;
int headerFlagsID;
private final static Class<?>[] customComposites_ICEBGW = {
OrderExecID.class,
OriginalOrderID.class,
MessageHeader.class
};
public ICESample() {
}
private void detectVirtualIdentifiers(MessageSchema msgSchema) {
blockLengthID = msgSchema.queryVirtualFieldId(new String[] {SpecialFieldIds.MESSAGE_HEADER_FIELD_NAME, "blockLength"});
templateIdID = msgSchema.queryVirtualFieldId(new String[] {SpecialFieldIds.MESSAGE_HEADER_FIELD_NAME, "templateId"});
sequenceIdID = msgSchema.queryVirtualFieldId(new String[] {SpecialFieldIds.MESSAGE_HEADER_FIELD_NAME, "sequenceId"});
sendTimeID = msgSchema.queryVirtualFieldId(new String[] {SpecialFieldIds.MESSAGE_HEADER_FIELD_NAME, "sendTime"});
headerFlagsID = msgSchema.queryVirtualFieldId(new String[] {SpecialFieldIds.MESSAGE_HEADER_FIELD_NAME, "headerFlags"});
}
private String messageHeaderToString(MessageHeader header) {
return "BlockLength=" + header.getBlockLength() + "; " +
"TemplateID=" + header.getTemplateId() + "; " +
"SchemaID=" + header.getSchemaId() + "; " +
"Version=" + header.getVersion() + "; " +
"SequenceID=" + header.getSequenceId() + "; " +
"SendTime=" + header.getSendTime() + "; " +
"HeaderFlags=" + header.getHeaderFlags()
;
}
private void useVIDsOnly(Document schema) throws LicenseException {
Class<?>[] customComposites = {
OrderExecID.class,
OriginalOrderID.class
// MessageHeader.class
};
final MessageSchema msgSchema = new MessageSchema(schema, false);
final ByteDecoder codec = new ByteDecoderFactory().create(msgSchema, customComposites);
}
private void run() throws Exception {
final File testsXmlFolder = new File("config").getAbsoluteFile();
final Document xmlSchema = ParseUtil.parse(new File(testsXmlFolder, "ICEBinarySchema_v3_0_Draft_06_10_2025.xml"));
final MessageSchema msgSchema = new MessageSchema(xmlSchema, false);
final ByteDecoder codec = new ByteDecoderFactory().create(msgSchema, customComposites_ICEBGW);
detectVirtualIdentifiers(msgSchema);
useVIDsOnly(xmlSchema);
final byte[] buffer = new byte[65536];
// Prepare empty message
IMessage msg = codec.encode(buffer, 0, buffer.length, 101);
// Access message header fields via virtual fields.
{
msg.setUnsignedInt(sequenceIdID, 12345);
msg.setLong(sendTimeID, System.currentTimeMillis());
System.out.println("BlockLength id: " + blockLengthID + ", value: " + msg.getInt(blockLengthID));
System.out.println("TemplateId id: " + templateIdID + ", value: " + msg.getInt(templateIdID));
System.out.println("SequenceId id: " + sequenceIdID + ", value: " + msg.getInt(sequenceIdID));
System.out.println("SendingTime id: " + sendTimeID + ", value: " + msg.getLong(sendTimeID));
System.out.println("HeaderFlags id: " + headerFlagsID + ", value: " + msg.getUnsignedInt(headerFlagsID));
}
// Access message header fields via stateless composite
{
MessageHeader header = msg.getStatelessComposite(SpecialFieldIds.MESSAGE_HEADER_ID, MessageHeader.class);
System.out.println(messageHeaderToString(header));
header.setSendTime(BigInteger.valueOf(System.currentTimeMillis()));
System.out.println(messageHeaderToString(header));
}
{
IMessage msgDecoded = codec.decode(buffer, 0, buffer.length);
System.out.println(msgDecoded.toFixString('|'));
}
}
/**
* Program entry point.
* @param args arguments.
*/
public static void main(String[] args) {
try {
ICESample sample = new ICESample();
sample.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Usage
- Run the sample:
- win: runICESample.bat
- linux: runICESample.sh
- Clean everything:
- win: clean.bat
- linux: clean.sh
Java SBE Decoder