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