Examples

This section provides a set of 10 runnable examples designed to help you get started quickly with the Unified Odds Feed SDK.

All examples are provided in Java, to make the tutorial consistent, we’ll be using IntelliJ IDEA as the development environment for Java. However, the same Java code can be run on any IDE or environment capable of running Java (such as Eclipse, VS Code, or CLI builds with Maven/Gradle).

Prerequisites

Before you start with these examples, make sure you have the following:

  1. Development Environment

    • IntelliJ IDEA (preferred for this tutorial), or any Java IDE such as Eclipse or VS Code.

    • Java 8 or higher installed.

  2. Project Setup

    • Access to the UofSdk Java project repository.

    • Maven or Gradle configured if you plan to build from CLI.

  3. Access Credentials

    • A valid integration token to connect to the Unified Odds Feed.

  4. Basic Knowledge

    • Familiarity with Java programming concepts.

    • Understanding of SDK initialization and running simple Java programs.

Available Examples

You can choose from the following examples when starting the SDK. Each example demonstrates a specific usage pattern or architecture for working with the Unified Odds SDK.

1. Basic SDK Setup

This example runs a single UofSession with MessageInterest.AllMessages, and performs a full odds recovery from all producers. You’ll see how to initialize the SDK, use a GlobalEventsListener to receive global events, and a MessageListener to process incoming odds messages.

Interactive Demo:

Follow along by clicking the buttons to explore the UofSdk Basic example step by step.

Output:

2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome over 60.5 has odds 1.8823294990432398 0.486144299348499
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome under 60.5 has odds 1.7897303641887263 0.513855700651501
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: Which team wins the coin toss
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Active
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome England has odds 1.923076923076923 0.5
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome South Africa has odds 1.923076923076923 0.5
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: 1st innings - England total at 1st dismissal
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Active
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome over 29.5 has odds 1.8691588785046729 0.5
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome under 29.5 has odds 1.8691588785046729 0.5
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: 1st innings - England top bowler
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Active
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome Bethell, Jacob has odds 6.554916374702053 0.106157392746206
2025-09-01 13:19:15,623 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-0] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome Jacks, Will has odds 7.986211956482447 0.086285075061033

2. Multi-Session Architecture

This example runs three parallel UofSessions — Prematch, Live, and Virtuals — each with filtered MessageInterest types. You’ll see how to configure session isolation, apply message filtering, and handle concurrent events across multiple sessions.

Follow along by clicking the buttons to explore the Multi Session example step by step.

Output:

Running the UofSdk SDK Basic example - multiple session
Building the configuration using the provided token
Creating a new UofSdk instance
Building 3 sessions: Prematch, Liveodds, Virtuals
Opening the feed instance
 ~ Feed instance will remain open for 30 minutes ~
2025-09-02 12:23:52,135 [WARN ] [] [main] [c.r.c.TrustEverythingTrustManager] - SECURITY ALERT: this trust manager trusts every certificate, effectively disabling peer verification. This is convenient for local development but offers no protection against man-in-the-middle attacks. Please see https://www.rabbitmq.com/ssl.html to learn more about peer certificate verification.
2025-09-02 12:23:52,360 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's leaf certificate subject: CN=global.stgmq.betradar.com, subject alternative names: [2, global.stgmq.betradar.com],[2, stgmq.betradar.com], issuer: CN=R10,O=Let's Encrypt,C=US, not valid after: Wed Oct 22 00:10:35 BST 2025, X.509 usage extensions: KeyUsage = digitalSignature/keyEncipherment (critical), BasicConstraints = CA:FALSE (critical), 1.3.6.1.4.1.11129.2.4.2 = 04:81:F5:04:81:F2:00:F0:00:76:00:ED:3C:4B:D6:E8:06:C2:A4:A2:00:57:DB:CB:24:E2:38:01:DF:51:2F:ED:C4:86:C5:70:0F:20:DD:B7:3E:3F:E0:00:00:01:98:39:C3:21:B0:00:00:04:03:00:47:30:45:02:20:70:2F:7A:52:45:24:76:57:BC:2B:C2:C6:4F:09:41:1E:26:9B:AD:BB:11:92:E4:A3:CE:B1:CC:BA:70:AB:19:20:02:21:00:D9:42:71:C2:6C:91:4C:ED:C5:BE:77:F5:E8:86:86:E1:8D:BA:3B:83:FF:47:7E:3E:02:1D:D6:BA:E3:A7:2D:92:00:76:00:0D:E1:F2:30:2B:D3:0D:C1:40:62:12:09:EA:55:2E:FC:47:74:7C:B1:D7:E9:30:EF:0E:42:1E:B4:7E:4E:AA:34:00:00:01:98:39:C3:21:8F:00:00:04:03:00:47:30:45:02:21:00:85:DC:DE:32:55:C7:65:56:3C:DA:57:13:9A:F1:FB:9E:FF:84:75:E0:8E:74:A1:27:3C:BC:3F:E5:CA:E8:DC:E0:02:20:7B:D8:5E:EB:18:8E:6D:AC:49:47:EC:07:CD:64:7F:58:DD:54:7E:38:86:D7:68:04:62:0A:E8:55:09:C7:5A:F6 (non-critical), 1.3.6.1.5.5.7.1.1 = 04:27:30:25:30:23:06:08:2B:06:01:05:05:07:30:02:86:17:68:74:74:70:3A:2F:2F:72:31:30:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = 79:06:C5:93:EA:23:9E:13:A0:A7:B2:B9:E1:8D:5D:CD:DE:3F:B7:3D (non-critical), SubjectAlternativeName = [2, global.stgmq.betradar.com]/[2, stgmq.betradar.com] (non-critical), 2.5.29.31 = 04:28:30:26:30:24:A0:22:A0:20:86:1E:68:74:74:70:3A:2F:2F:72:31:30:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F:31:32:37:2E:63:72:6C (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), ExtendedKeyUsage = TLS Web server authentication/TLS Web client authentication (non-critical)
2025-09-02 12:23:52,361 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's certificate chain entry subject: CN=R10,O=Let's Encrypt,C=US, subject alternative names: , issuer: CN=ISRG Root X1,O=Internet Security Research Group,C=US, not valid after: Fri Mar 12 23:59:59 GMT 2027, X.509 usage extensions: KeyUsage = digitalSignature/keyCertSign/cRLSign (critical), BasicConstraints = CA:TRUE (critical), 1.3.6.1.5.5.7.1.1 = 04:26:30:24:30:22:06:08:2B:06:01:05:05:07:30:02:86:16:68:74:74:70:3A:2F:2F:78:31:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), 2.5.29.31 = 04:20:30:1E:30:1C:A0:1A:A0:18:86:16:68:74:74:70:3A:2F:2F:78:31:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E (non-critical), ExtendedKeyUsage = TLS Web client authentication/TLS Web server authentication (non-critical)
Example successfully started

2025-09-02 12:23:54,522 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Received odds change for: MatchImpl{id=sr:match:63447789, locales=[en]} 
2025-09-02 12:23:54,919 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Received odds information for: Winner
2025-09-02 12:23:54,919 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Market status is: Active
2025-09-02 12:23:54,941 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Drozdz, Dariusz has odds 1.47 0.635003
2025-09-02 12:23:54,941 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Mrugala, Bartlomiej has odds 2.43 0.364995
2025-09-02 12:23:54,941 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Received odds information for: Point handicap
2025-09-02 12:23:54,941 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Market status is: Active
2025-09-02 12:23:54,952 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Drozdz, Dariusz (-3.5) has odds 1.73 0.5343056305084508
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Mrugala, Bartlomiej (+3.5) has odds 1.96 0.46569436976822415
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Received odds information for: Point handicap
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Market status is: Active
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Drozdz, Dariusz (-5.5) has odds 2.0 0.4546445904084942
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Outcome Mrugala, Bartlomiej (+5.5) has odds 1.69 0.5453554099058493
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Received odds information for: Point handicap
2025-09-02 12:23:54,956 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-PrematchMessagesOnly] - Market status is: Active

3. Timestamp-Based Recovery

This example runs a single UofSession with ProducerManager to recover data from the last 2 hours using setProducersRecoveryTimestamp(). You’ll see how to perform historical data recovery, manage producers, and synchronize using timestamp-based recovery.

Follow along by clicking the buttons to explore the Timestamp Based-Recovery example step by step.

Output:

Running the UofSdk SDK Basic example - single session
Building the configuration using the provided token
UofConfiguration{accessToken=TpL***q4H, environment=Production, nodeId=123, defaultLanguage=en, languages=([eng]), exceptionHandlingStrategy=Throw, bookmakerId=32523, ApiConfiguration{host=api.betradar.com, port=0, useSsl=true, replayHost=api.betradar.com/v1/replay, httpClientTimeout=30, httpClientRecoveryTimeout=30, httpClientFastFailingTimeout=5, httpClientMaxConnTotal=20, httpClientMaxConnPerRoute=15}, RabbitConfiguration{host=mq.betradar.com, port=5671, useSsl=true, username=TpLquOFTmLT5ThTq4H, password=null, virtualHost=/unifiedfeed/32523, connectionTimeout=60, heartBeat=60}, CacheConfiguration{sportEventCacheTimeout=12, sportEventStatusCacheTimeout=5 (minutes), profileCacheTimeout=24, variantMarketDescriptionCacheTimeout=3, ignoreBetPalTimelineSportEventStatusCacheTimeout=3, ignoreBetPalTimelineSportEventStatus=false}, ProducerConfiguration{inactivitySeconds=20, inactivitySecondsPrematch=20, maxRecoveryTime=1200, minIntervalBetweenRecoveryRequest=30, disabledProducers=([4]), availableProducers=([1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17])}, AdditionalConfiguration{omitMarketMappings=false, statisticsInterval=10}, UsageConfiguration{isExportEnabled=true, exportIntervalInSec=300, exportTimeoutInSec=20, host='https://usage.uofsdk.betradar.com'}}
Creating a new UofSdk instance
Setting last message timestamp(used for recovery) for all the active producers to two hours back
Building a simple session which will receive all messages
Opening the feed instance
Feed instance will remain open for 30 minutes
2025-09-02 13:25:37,852 [WARN ] [] [main] [c.r.c.TrustEverythingTrustManager] - SECURITY ALERT: this trust manager trusts every certificate, effectively disabling peer verification. This is convenient for local development but offers no protection against man-in-the-middle attacks. Please see https://www.rabbitmq.com/ssl.html to learn more about peer certificate verification.
2025-09-02 13:25:38,086 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's leaf certificate subject: CN=global.mq.betradar.com, subject alternative names: [2, global.mq.betradar.com],[2, mq.betradar.com], issuer: CN=R11,O=Let's Encrypt,C=US, not valid after: Wed Oct 22 09:27:18 BST 2025, X.509 usage extensions: KeyUsage = digitalSignature/keyEncipherment (critical), BasicConstraints = CA:FALSE (critical), 1.3.6.1.4.1.11129.2.4.2 = 04:81:F5:04:81:F2:00:F0:00:76:00:1A:04:FF:49:D0:54:1D:40:AF:F6:A0:C3:BF:F1:D8:C4:67:2F:4E:EC:EE:23:40:68:98:6B:17:40:2E:DC:89:7D:00:00:01:98:3B:C0:D3:0E:00:00:04:03:00:47:30:45:02:21:00:FE:84:9C:AB:E9:51:0E:9F:4B:72:82:50:CA:F4:02:85:7A:5C:E6:A6:09:78:88:F0:B3:C7:5F:F2:35:BC:5F:DE:02:20:72:14:55:CE:18:8B:35:2B:4C:93:BE:41:10:20:CE:A2:00:2F:4B:2B:B1:35:9F:51:AA:F6:79:6E:61:A1:26:14:00:76:00:ED:3C:4B:D6:E8:06:C2:A4:A2:00:57:DB:CB:24:E2:38:01:DF:51:2F:ED:C4:86:C5:70:0F:20:DD:B7:3E:3F:E0:00:00:01:98:3B:C0:DA:D9:00:00:04:03:00:47:30:45:02:21:00:D9:B6:1D:9D:EA:EA:59:C5:52:24:30:EE:6D:F9:A9:BD:6E:67:83:1B:4E:F1:CF:8B:F4:00:16:B2:AD:C9:5D:8D:02:20:65:A8:5D:40:C0:38:B5:18:BB:7B:72:CB:31:5C:C7:00:58:F5:E9:1E:83:5A:00:87:A9:84:28:70:CF:FC:CC:86 (non-critical), 1.3.6.1.5.5.7.1.1 = 04:27:30:25:30:23:06:08:2B:06:01:05:05:07:30:02:86:17:68:74:74:70:3A:2F:2F:72:31:31:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = 69:84:2F:CA:EE:8B:71:DE:A0:A8:BD:ED:A1:09:25:00:69:39:B7:12 (non-critical), SubjectAlternativeName = [2, global.mq.betradar.com]/[2, mq.betradar.com] (non-critical), 2.5.29.31 = 04:27:30:25:30:23:A0:21:A0:1F:86:1D:68:74:74:70:3A:2F:2F:72:31:31:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F:32:39:2E:63:72:6C (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:C5:CF:46:A4:EA:F4:C3:C0:7A:6C:95:C4:2D:B0:5E:92:2F:26:E3:B9 (non-critical), ExtendedKeyUsage = TLS Web server authentication/TLS Web client authentication (non-critical)
2025-09-02 13:25:38,087 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's certificate chain entry subject: CN=R11,O=Let's Encrypt,C=US, subject alternative names: , issuer: CN=ISRG Root X1,O=Internet Security Research Group,C=US, not valid after: Fri Mar 12 23:59:59 GMT 2027, X.509 usage extensions: KeyUsage = digitalSignature/keyCertSign/cRLSign (critical), BasicConstraints = CA:TRUE (critical), 1.3.6.1.5.5.7.1.1 = 04:26:30:24:30:22:06:08:2B:06:01:05:05:07:30:02:86:16:68:74:74:70:3A:2F:2F:78:31:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = C5:CF:46:A4:EA:F4:C3:C0:7A:6C:95:C4:2D:B0:5E:92:2F:26:E3:B9 (non-critical), 2.5.29.31 = 04:20:30:1E:30:1C:A0:1A:A0:18:86:16:68:74:74:70:3A:2F:2F:78:31:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E (non-critical), ExtendedKeyUsage = TLS Web client authentication/TLS Web server authentication (non-critical)
Example successfully started
2025-09-02 13:25:41,859 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds change for: MatchImpl{id=sr:match:63023753, locales=[en]} 
2025-09-02 13:25:42,122 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: Winner (incl. super over)
2025-09-02 13:25:42,122 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Active
2025-09-02 13:25:42,142 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome Dirang Daredevils has odds 1.9247057003734296 0.494546315495026
2025-09-02 13:25:42,142 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome Kra Dominators has odds 1.8852271854227007 0.505453684504974
2025-09-02 13:25:42,142 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: Will there be a tie
2025-09-02 13:25:42,142 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Active
2025-09-02 13:25:42,142 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome yes has odds 13.324376361594725 0.0198909263099005
2025-09-02 13:25:42,146 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds change for: MatchImpl{id=sr:match:62688685, locales=[en]} 
2025-09-02 13:25:42,406 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received odds information for: 1st innings - Akram, Mohammad total
2025-09-02 13:25:42,406 [INFO ] [uf-sdk-32523-123] [uf-sdk-32523-123-amqp-t-1] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Market status is: Deactivated

4. Full Message Data Access

This example uses a DataSessionSetup with a DataMessageListener to inspect complete message payloads. You’ll see how to access raw message data, parse events in detail, and explore the underlying data structures.

Follow along by clicking the buttons to explore the Full Message Data Access example step by step.

Output:

Running the UofSdk SDK data example - single session
Building the configuration using the provided token
Creating a new UofSdk instance
Setting last message timestamp (used for recovery) for all the active producers to two hours back
Building a simple session which will receive all messages
Opening the feed instance
Feed instance will remain open for 30 minutes
2025-09-02 14:05:29,074 [WARN ] [] [main] [c.r.c.TrustEverythingTrustManager] - SECURITY ALERT: this trust manager trusts every certificate, effectively disabling peer verification. This is convenient for local development but offers no protection against man-in-the-middle attacks. Please see https://www.rabbitmq.com/ssl.html to learn more about peer certificate verification.
2025-09-02 14:05:29,181 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's leaf certificate subject: CN=global.stgmq.betradar.com, subject alternative names: [2, global.stgmq.betradar.com],[2, stgmq.betradar.com], issuer: CN=R10,O=Let's Encrypt,C=US, not valid after: Wed Oct 22 00:10:35 BST 2025, X.509 usage extensions: KeyUsage = digitalSignature/keyEncipherment (critical), BasicConstraints = CA:FALSE (critical), 1.3.6.1.4.1.11129.2.4.2 = 04:81:F5:04:81:F2:00:F0:00:76:00:ED:3C:4B:D6:E8:06:C2:A4:A2:00:57:DB:CB:24:E2:38:01:DF:51:2F:ED:C4:86:C5:70:0F:20:DD:B7:3E:3F:E0:00:00:01:98:39:C3:21:B0:00:00:04:03:00:47:30:45:02:20:70:2F:7A:52:45:24:76:57:BC:2B:C2:C6:4F:09:41:1E:26:9B:AD:BB:11:92:E4:A3:CE:B1:CC:BA:70:AB:19:20:02:21:00:D9:42:71:C2:6C:91:4C:ED:C5:BE:77:F5:E8:86:86:E1:8D:BA:3B:83:FF:47:7E:3E:02:1D:D6:BA:E3:A7:2D:92:00:76:00:0D:E1:F2:30:2B:D3:0D:C1:40:62:12:09:EA:55:2E:FC:47:74:7C:B1:D7:E9:30:EF:0E:42:1E:B4:7E:4E:AA:34:00:00:01:98:39:C3:21:8F:00:00:04:03:00:47:30:45:02:21:00:85:DC:DE:32:55:C7:65:56:3C:DA:57:13:9A:F1:FB:9E:FF:84:75:E0:8E:74:A1:27:3C:BC:3F:E5:CA:E8:DC:E0:02:20:7B:D8:5E:EB:18:8E:6D:AC:49:47:EC:07:CD:64:7F:58:DD:54:7E:38:86:D7:68:04:62:0A:E8:55:09:C7:5A:F6 (non-critical), 1.3.6.1.5.5.7.1.1 = 04:27:30:25:30:23:06:08:2B:06:01:05:05:07:30:02:86:17:68:74:74:70:3A:2F:2F:72:31:30:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = 79:06:C5:93:EA:23:9E:13:A0:A7:B2:B9:E1:8D:5D:CD:DE:3F:B7:3D (non-critical), SubjectAlternativeName = [2, global.stgmq.betradar.com]/[2, stgmq.betradar.com] (non-critical), 2.5.29.31 = 04:28:30:26:30:24:A0:22:A0:20:86:1E:68:74:74:70:3A:2F:2F:72:31:30:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F:31:32:37:2E:63:72:6C (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), ExtendedKeyUsage = TLS Web server authentication/TLS Web client authentication (non-critical)
2025-09-02 14:05:29,182 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's certificate chain entry subject: CN=R10,O=Let's Encrypt,C=US, subject alternative names: , issuer: CN=ISRG Root X1,O=Internet Security Research Group,C=US, not valid after: Fri Mar 12 23:59:59 GMT 2027, X.509 usage extensions: KeyUsage = digitalSignature/keyCertSign/cRLSign (critical), BasicConstraints = CA:TRUE (critical), 1.3.6.1.5.5.7.1.1 = 04:26:30:24:30:22:06:08:2B:06:01:05:05:07:30:02:86:16:68:74:74:70:3A:2F:2F:78:31:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), 2.5.29.31 = 04:20:30:1E:30:1C:A0:1A:A0:18:86:16:68:74:74:70:3A:2F:2F:78:31:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E (non-critical), ExtendedKeyUsage = TLS Web client authentication/TLS Web server authentication (non-critical)
Example successfully started
2025-09-02 14:05:33,513 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [c.s.u.e.c.DataMessageListener-SingleSessionSetup] - Received OddsChangeImpl for sport event sr:match:63458827
Match[Id:'sr:match:63458827', SportId:'sr:sport:20', Name:'Forman, Lubos vs. Havrda, Cesta', ScheduledTime:'Wed Sep 03 08:30:00 BST 2025', ScheduledEndTime:'null', Status:[Status:NotStarted, ReportingStatus:Unknown, WinnerId:null], EventStatus:NotStarted, BookingStatus:Bookable, Venue{id=sr:venue:78399, names={en=A17 Hall}, cities={en=Liberec}, countries={en=Czechia}, capacity=null, coordinates='null'}, SportEventConditions{attendance='null', eventMode='bo5', referee=null, weatherInfo=null, pitchers=null}, HomeCompetitor:[Id:sr:competitor:1264963, Name:Forman, Lubos, Abr:FOR, Country:Czechia, CountryCode:CZE, IsVirtual:false, References:[BetfairId:null, BetradarId:31665863, RN:null], Qualifier:'home'], AwayCompetitor:[Id:sr:competitor:885331, Name:Havrda, Cesta, Abr:HAV, Country:Czechia, CountryCode:CZE, IsVirtual:false, References:[BetfairId:null, BetradarId:20037715, RN:null], Qualifier:'away'], Season:[null], TournamentRound:[Name:'', GroupName:'Czech Liga Pro', GroupId:'null', Type:group, Number:1], Status:[Status:NotStarted, ReportingStatus:Unknown, WinnerId:null, HomeScore:null, AwayScore:null]]MarketId:237, Names:[en: Point handicap; ], Specifiers:'hcp=0.5', AdditionalInfo:'', MarketStatus:Active, IsFavourite:true, MarketDefinition:[NameTemplates=[, en:Point handicap, ], OutcomeType=null, Groups=all,score,regular_play], MarketMetaData:  ->  Market 237 mapped to TypeId:51, SubTypeId:null, Sov:{hcp}OutcomeId:1714, Name:Forman, Lubos (+0.5), Odds:1.77, OddsUS:-129.87012987012986, IsActive:true, IsPlayerOutcome:false, Probabilities:0.5109268199051479, OutcomeDefinition:[NameTemplates=[, en:{$competitor1} ({+hcp}), ]], AdditionalProbabilities:[]OutcomeId:1715, Name:Havrda, Cesta (-0.5), Odds:1.84, OddsUS:-119.04761904761905, IsActive:true, IsPlayerOutcome:false, Probabilities:0.4890731803318175, OutcomeDefinition:[NameTemplates=[, en:{$competitor2} ({-hcp}), ]], AdditionalProbabilities:[]MarketId:237 has outcome mappings:
Legacy marketId:51 and outcomeId:1715 is mapped to Id:3 and Name:2
Legacy marketId:51 and outcomeId:1714 is mapped to Id:1 and Name:12025-09-02 14:05:34,259 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [c.s.u.e.c.DataMessageListener-SingleSessionSetup] - Received OddsChangeImpl for sport event sr:match:63458849
Match[Id:'sr:match:63458849', SportId:'sr:sport:20', Name:'Strnad, Jaroslav (1961) vs. Forman, Lubos', ScheduledTime:'Wed Sep 03 09:30:00 BST 2025', ScheduledEndTime:'null', Status:[Status:NotStarted, ReportingStatus:Unknown, WinnerId:null], EventStatus:NotStarted, BookingStatus:Bookable, Venue{id=sr:venue:78399, names={en=A17 Hall}, cities={en=Liberec}, countries={en=Czechia}, capacity=null, coordinates='null'}, SportEventConditions{attendance='null', eventMode='bo5', referee=null, weatherInfo=null, pitchers=null}, HomeCompetitor:[Id:sr:competitor:881633, Name:Strnad, Jaroslav (1961), Abr:STR, Country:Czechia, CountryCode:CZE, IsVirtual:false, References:[BetfairId:null, BetradarId:20430657, RN:null], Qualifier:'home'], AwayCompetitor:[Id:sr:competitor:1264963, Name:Forman, Lubos, Abr:FOR, Country:Czechia, CountryCode:CZE, IsVirtual:false, References:[BetfairId:null, BetradarId:31665863, RN:null], Qualifier:'away'], Season:[null], TournamentRound:[Name:'', GroupName:'Czech Liga Pro', GroupId:'null', Type:group, Number:1], Status:[Status:NotStarted, ReportingStatus:Unknown, WinnerId:null, HomeScore:null, AwayScore:null]]MarketId:237, Names:[en: Point handicap; ], Specifiers:'hcp=5.5', AdditionalInfo:'', MarketStatus:Active, IsFavourite:true, MarketDefinition:[NameTemplates=[, en:Point handicap, ], OutcomeType=null, Groups=all,score,regular_play], MarketMetaData:  ->  Market 237 mapped to TypeId:51, SubTypeId:null, Sov:{hcp}OutcomeId:1714, Name:Strnad, Jaroslav (1961) (+5.5), Odds:1.85, OddsUS:-117.6470588235294, IsActive:true, IsPlayerOutcome:false, Probabilities:0.48489357536788635, OutcomeDefinition:[NameTemplates=[, en:{$competitor1} ({+hcp}), ]], AdditionalProbabilities:[]OutcomeId:1715, Name:Forman, Lubos (-5.5), Odds:1.75, OddsUS:-133.33333333333334, IsActive:true, IsPlayerOutcome:false, Probabilities:0.5151064248729063, OutcomeDefinition:[NameTemplates=[, en:{$competitor2} ({-hcp}), ]], AdditionalProbabilities:[]MarketId:237 has outcome mappings:
Legacy marketId:51 and outcomeId:1715 is mapped to Id:3 and Name:2
Legacy marketId:51 and outcomeId:1714 is mapped to Id:1 and Name:1MarketId:237, Names:[en: Point handicap; ], Specifiers:'hcp=6.5', AdditionalInfo:'', MarketStatus:Deactivated, IsFavourite:false, MarketDefinition:[NameTemplates=[, en:Point handicap, ], OutcomeType=null, Groups=all,score,regular_play], MarketMetaData:  ->  Market 237 mapped to TypeId:51, SubTypeId:null, Sov:{hcp}2025-09-02 14:05:34,522 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [c.s.u.e.c.DataMessageListener-SingleSessionSetup] - Received BetSettlementImpl for sport event sr:match:63441775
Match[Id:'sr:match:63441775', SportId:'sr:sport:20', Name:'Chmielowski, Jakub vs. Sklensky, Miroslav', ScheduledTime:'Tue Sep 02 13:45:00 BST 2025', ScheduledEndTime:'null', Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:988091], EventStatus:Finished, BookingStatus:Bookable, Venue{id=sr:venue:69571, names={en=OSP 1}, cities={en=Czestochowa}, countries={en=Poland}, capacity=null, coordinates='null'}, SportEventConditions{attendance='null', eventMode='bo5', referee=null, weatherInfo=null, pitchers=null}, HomeCompetitor:[Id:sr:competitor:988091, Name:Chmielowski, Jakub, Abr:CHM, Country:null, CountryCode:null, IsVirtual:false, References:[BetfairId:null, BetradarId:24235999, RN:null], Qualifier:'home'], AwayCompetitor:[Id:sr:competitor:379950, Name:Sklensky, Miroslav, Abr:SKL, Country:Czechia, CountryCode:CZE, IsVirtual:false, References:[BetfairId:null, BetradarId:15186453, RN:null], Qualifier:'away'], Season:[null], TournamentRound:[Name:'', GroupName:'TT Elite Series', GroupId:'null', Type:group, Number:1], Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:988091, HomeScore:3, AwayScore:1]]MarketId:186, Name:Winner, Specifiers:'', AdditionalInfo:'', VoidReason:null2025-09-02 14:05:34,863 [WARN ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [MarketMappingWriter] - MarketId:186, specifiers=null has too many mappings [2].
2025-09-02 14:05:34,865 [DEBUG] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [MarketMappingWriter] - MarketId:186, producer:3, sportId:20, specifiers=null, mapping[0]: MarketMappingData{MarketId=20, sportId=sr:sport:20, producers=3, sportId=sr:sport:20, sov=null, validFor=null, typeId=20, subTypeId=null}
2025-09-02 14:05:34,865 [DEBUG] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [MarketMappingWriter] - MarketId:186, producer:3, sportId:20, specifiers=null, mapping[1]: MarketMappingData{MarketId=382, sportId=sr:sport:20, producers=3, sportId=sr:sport:20, sov=null, validFor=null, typeId=382, subTypeId=null}
  ->  Market 186 mapped to TypeId:20, SubTypeId:null, Sov:null  ->  Market 186 mapped to TypeId:382, SubTypeId:null, Sov:nullOutcomeId:4, Name:Chmielowski, Jakub, VoidFactor:0.0, DeadHeatFactor:1.0, OutcomeResult:WonOutcomeId:5, Name:Sklensky, Miroslav, VoidFactor:0.0, DeadHeatFactor:1.0, OutcomeResult:LostMarketId:186 has outcome mappings:
Legacy marketId:20 and outcomeId:4 is mapped to Id:1 and Name:1
Legacy marketId:20 and outcomeId:5 is mapped to Id:3 and Name:2
Legacy marketId:382 and outcomeId:4 is mapped to Id:1 and Name:1
Legacy marketId:382 and outcomeId:5 is mapped to Id:3 and Name:2MarketId:237, Name:Point handicap, Specifiers:'hcp=2.5', AdditionalInfo:'', VoidReason:null  ->  Market 237 mapped to TypeId:51, SubTypeId:null, Sov:{hcp}OutcomeId:1714, Name:Chmielowski, Jakub (+2.5), VoidFactor:0.0, DeadHeatFactor:1.0, OutcomeResult:WonOutcomeId:1715, Name:Sklensky, Miroslav (-2.5), VoidFactor:0.0, DeadHeatFactor:1.0, OutcomeResult:LostMarketId:237 has outcome mappings:
Legacy marketId:51 and outcomeId:1715 is mapped to Id:3 and Name:2

5. Market Descriptions API

This example uses MarketDescriptionManager.getMarketDescriptions() to enumerate static metadata. You’ll see how to access market metadata, work with static data APIs, and understand betting market structures.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

The odds feed instance was created, the API data is now available

Listing static market descriptions

Id:'516', Name:'{!framenr} frame - last points scored', Associated groups:'[all, score, frame]', Specifiers:'framenr'
Id:'1049', Name:'Result of {!pitchnr} pitch', Associated groups:'[all, rapid_market, pitch]', Specifiers:'pitchnr'
Id:'323', Name:'{!setnr} set end {endnr} - total', Associated groups:'[all, score, end]', Specifiers:'setnr,endnr,total'
Id:'95', Name:'2nd half - both teams to score', Associated groups:'[all, score, 2nd_half]', Specifiers:''
Id:'134', Name:'Penalty shootout - winner & total', Associated groups:'[all, combo, pen_so]', Specifiers:'total'
Id:'52', Name:'Highest scoring half', Associated groups:'[all, score, regular_play]', Specifiers:''
Id:'806', Name:'{$event} - bottom {pos} finish', Associated groups:'[all, league]', Specifiers:'pos'
Id:'491', Name:'Which player wins the rest of the match', Associated groups:'[all, score, regular_play]', Specifiers:'score'
Id:'651', Name:'{!inningnr} innings - {%player} dismissal method', Associated groups:'[all]', Specifiers:'inningnr,player'
Id:'831', Name:'Draw sum total (incl. bonus ball)', Associated groups:'[all]', Specifiers:'total'
Id:'633', Name:'{!mapnr} map round {roundnr} - player with {!killnr} kill', Associated groups:'[all, round, player]', Specifiers:'mapnr,roundnr,killnr'
Id:'122', Name:'Will there be a penalty shootout', Associated groups:'[all, score, incl_ot]', Specifiers:''
Id:'872', Name:'Trifecta', Associated groups:'[all]', Specifiers:''
Id:'1010', Name:'{%competitor} total eagles', Associated groups:'[all]', Specifiers:'competitor,total'
Id:'1275', Name:'{!setnr} set - {$competitor2} total aces', Associated groups:'[all, player_props]', Specifiers:'setnr,total'
Id:'255', Name:'Winning margin (incl. extra innings)', Associated groups:'[all, score, incl_ei]', Specifiers:''

6. Market Mappings Analysis

This example uses MarketDescriptionManager with mapping data to manage outcome and specifier relationships. You’ll see how to work with market variant mappings, translate outcomes, and handle specifiers effectively.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

The odds feed instance was created, the API data is now available

Listing static market descriptions

Id:'516', Name:'{!framenr} frame - last points scored', Associated groups:'[all, score, frame]', Specifiers:'framenr'
	MappingData:
		ProducerIds:'[1, 4]', SportId:'sr:sport:19', MappedMarketId:'8:1208', ValidFor:'', SovTemplate:'{framenr}'

Id:'1049', Name:'Result of {!pitchnr} pitch', Associated groups:'[all, rapid_market, pitch]', Specifiers:'pitchnr'
	MappingData:
		ProducerIds:'[1, 4]', SportId:'sr:sport:3', MappedMarketId:'8:1722', ValidFor:'', SovTemplate:'{pitchnr}'
		ProducerIds:'[15]', SportId:'sr:sport:3', MappedMarketId:'8:1722', ValidFor:'', SovTemplate:'{pitchnr}'

Id:'323', Name:'{!setnr} set end {endnr} - total', Associated groups:'[all, score, end]', Specifiers:'setnr,endnr,total'
	MappingData:
		ProducerIds:'[1, 4]', SportId:'sr:sport:32', MappedMarketId:'8:910', ValidFor:'', SovTemplate:'{setnr}/{endnr}/{total}'

Id:'95', Name:'2nd half - both teams to score', Associated groups:'[all, score, 2nd_half]', Specifiers:''
	MappingData:
		ProducerIds:'[1, 4]', SportId:'sr:sport:1', MappedMarketId:'8:303', ValidFor:'', SovTemplate:'null'
		ProducerIds:'[1, 4]', SportId:'sr:sport:24', MappedMarketId:'8:303', ValidFor:'', SovTemplate:'null'
		ProducerIds:'[3]', SportId:'sr:sport:1', MappedMarketId:'329', ValidFor:'', SovTemplate:'null'
		ProducerIds:'[3]', SportId:'sr:sport:106', MappedMarketId:'329', ValidFor:'', SovTemplate:'null'

Id:'134', Name:'Penalty shootout - winner & total', Associated groups:'[all, combo, pen_so]', Specifiers:'total'
	MappingData:
		ProducerIds:'[1, 4]', SportId:'sr:sport:1', MappedMarketId:'8:1164', ValidFor:'', SovTemplate:'{total}'

7. Replay Server Integration

This example uses UofSdkForReplay with a ReplayManager to simulate historical events. You’ll see how to set up a replay environment, play back historical data, and run controlled testing scenarios.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Received odds information for: 12th corner
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Market status is: Deactivated
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Received odds information for: Race to 9 corners
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Market status is: Deactivated
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Received odds information for: Total bookings
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Market status is: Active
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Outcome under 5.5 has odds NaN 0.8204025448
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Outcome over 5.5 has odds 4.5 0.1795974552
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Received odds information for: Total
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Market status is: Active
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Outcome over 5.5 has odds 12.0 0.0330894993
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Outcome under 5.5 has odds 1.01 0.9669105007
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Received odds information for: 5 minutes - 1st goal from 76 to 80
2025-09-03 14:01:32,218 [INFO ] [uf-sdk-32523-23211] [uf-sdk-32523-23211-amqp-t-0] [c.s.u.e.c.MessageListener-ReplaySessionSetup] - Market status is: Active

8. Sport Event Data Explorer

This example uses SportEventDataPrinter to access the static sport hierarchy and event metadata. You’ll see how to explore sport data structures, navigate event hierarchies, and work with tournament and competition APIs.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

Listing static sport event data

Match[Id:'sr:match:12089842', SportId:'sr:sport:1', Name:'Spal Ferrara vs. Cagliari Calcio', ScheduledTime:'Sun Sep 17 14:00:00 BST 2017', ScheduledEndTime:'null', Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:2719], EventStatus:Finished, BookingStatus:Unavailable, Venue{id=sr:venue:2737, names={en=Stadio Paolo Mazza}, cities={en=Ferrara}, countries={en=Italy}, capacity=17900, coordinates='44.840168,11.607774'}, SportEventConditions{attendance='null', eventMode='null', referee=null, weatherInfo=null, pitchers=null}, HomeCompetitor:[Id:sr:competitor:113755, Name:Spal Ferrara, Abr:SPA, Country:Italy, CountryCode:ITA, IsVirtual:false, References:[BetfairId:null, BetradarId:9774160, RN:null], Qualifier:'home'], AwayCompetitor:[Id:sr:competitor:2719, Name:Cagliari Calcio, Abr:CAG, Country:Italy, CountryCode:ITA, IsVirtual:false, References:[BetfairId:null, BetradarId:367849, RN:null], Qualifier:'away'], Season:[Serie A 17/18[sr:season:42720]  Sat Aug 19 01:00:00 BST 2017 - Mon May 21 01:00:00 BST 2018], TournamentRound:[Name:'', GroupName:'Serie A', GroupId:'null', Type:group, Number:4], Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:2719, HomeScore:0, AwayScore:2]]Match[Id:'sr:match:12089842', SportId:'sr:sport:1', Name:'Spal Ferrara vs. Cagliari Calcio', ScheduledTime:'Sun Sep 17 14:00:00 BST 2017', ScheduledEndTime:'null', Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:2719], EventStatus:Finished, BookingStatus:Unavailable, Venue{id=sr:venue:2737, names={en=Stadio Paolo Mazza}, cities={en=Ferrara}, countries={en=Italy}, capacity=17900, coordinates='44.840168,11.607774'}, SportEventConditions{attendance='null', eventMode='null', referee=null, weatherInfo=null, pitchers=null}, HomeCompetitor:[Id:sr:competitor:113755, Name:Spal Ferrara, Abr:SPA, Country:Italy, CountryCode:ITA, IsVirtual:false, References:[BetfairId:null, BetradarId:9774160, RN:null], Qualifier:'home'], AwayCompetitor:[Id:sr:competitor:2719, Name:Cagliari Calcio, Abr:CAG, Country:Italy, CountryCode:ITA, IsVirtual:false, References:[BetfairId:null, BetradarId:367849, RN:null], Qualifier:'away'], Season:[Serie A 17/18[sr:season:42720]  Sat Aug 19 01:00:00 BST 2017 - Mon May 21 01:00:00 BST 2018], TournamentRound:[Name:'', GroupName:'Serie A', GroupId:'null', Type:group, Number:4], Status:[Status:Finished, ReportingStatus:Unknown, WinnerId:sr:competitor:2719, HomeScore:0, AwayScore:2]]

Listing sport event data - END

SportEventDataPrinter example finished

9. Advanced Configuration

This example uses a custom UofConfiguration that goes beyond the default properties, adjusting timeouts, caching, and locales. You’ll see how to apply configuration builder patterns, select environments, and fine-tune advanced settings.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

[INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome over 2.5 has odds 30.0 0.016220795653023617
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome under 2.5 has odds 1.01 0.9837792085046445
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Received odds information for: Odd/even
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Market status is: Active
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome odd has odds 2.12 0.465656
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome even has odds 1.85 0.534344
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Received odds information for: 1st half - Gaziantep FK clean sheet
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Market status is: Active
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome yes has odds 1.67 0.595064
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Outcome no has odds 2.44 0.404936
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Received odds information for: Draw no bet
2025-09-03 15:05:58,459 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.MessageListener-AdvancedConfigurationSetup] - Market status is: Active

10. Cache Export/Import

This example shows how to use SDK cache serialization and deserialization to maintain state across restarts. You’ll see how to manage cache data, ensure state persistence, and optimize performance.

Follow along by clicking the buttons to explore the Market Description API example step by step.

Output:

Creating a new UofSdk instance
Building a simple session which will receive all messages
Opening the feed instance
Feed instance will remain open for 10 seconds
2025-09-03 15:15:38,669 [WARN ] [] [main] [c.r.c.TrustEverythingTrustManager] - SECURITY ALERT: this trust manager trusts every certificate, effectively disabling peer verification. This is convenient for local development but offers no protection against man-in-the-middle attacks. Please see https://www.rabbitmq.com/ssl.html to learn more about peer certificate verification.
2025-09-03 15:15:38,800 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's leaf certificate subject: CN=global.stgmq.betradar.com, subject alternative names: [2, global.stgmq.betradar.com],[2, stgmq.betradar.com], issuer: CN=R10,O=Let's Encrypt,C=US, not valid after: Wed Oct 22 00:10:35 BST 2025, X.509 usage extensions: KeyUsage = digitalSignature/keyEncipherment (critical), BasicConstraints = CA:FALSE (critical), 1.3.6.1.4.1.11129.2.4.2 = 04:81:F5:04:81:F2:00:F0:00:76:00:ED:3C:4B:D6:E8:06:C2:A4:A2:00:57:DB:CB:24:E2:38:01:DF:51:2F:ED:C4:86:C5:70:0F:20:DD:B7:3E:3F:E0:00:00:01:98:39:C3:21:B0:00:00:04:03:00:47:30:45:02:20:70:2F:7A:52:45:24:76:57:BC:2B:C2:C6:4F:09:41:1E:26:9B:AD:BB:11:92:E4:A3:CE:B1:CC:BA:70:AB:19:20:02:21:00:D9:42:71:C2:6C:91:4C:ED:C5:BE:77:F5:E8:86:86:E1:8D:BA:3B:83:FF:47:7E:3E:02:1D:D6:BA:E3:A7:2D:92:00:76:00:0D:E1:F2:30:2B:D3:0D:C1:40:62:12:09:EA:55:2E:FC:47:74:7C:B1:D7:E9:30:EF:0E:42:1E:B4:7E:4E:AA:34:00:00:01:98:39:C3:21:8F:00:00:04:03:00:47:30:45:02:21:00:85:DC:DE:32:55:C7:65:56:3C:DA:57:13:9A:F1:FB:9E:FF:84:75:E0:8E:74:A1:27:3C:BC:3F:E5:CA:E8:DC:E0:02:20:7B:D8:5E:EB:18:8E:6D:AC:49:47:EC:07:CD:64:7F:58:DD:54:7E:38:86:D7:68:04:62:0A:E8:55:09:C7:5A:F6 (non-critical), 1.3.6.1.5.5.7.1.1 = 04:27:30:25:30:23:06:08:2B:06:01:05:05:07:30:02:86:17:68:74:74:70:3A:2F:2F:72:31:30:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = 79:06:C5:93:EA:23:9E:13:A0:A7:B2:B9:E1:8D:5D:CD:DE:3F:B7:3D (non-critical), SubjectAlternativeName = [2, global.stgmq.betradar.com]/[2, stgmq.betradar.com] (non-critical), 2.5.29.31 = 04:28:30:26:30:24:A0:22:A0:20:86:1E:68:74:74:70:3A:2F:2F:72:31:30:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F:31:32:37:2E:63:72:6C (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), ExtendedKeyUsage = TLS Web server authentication/TLS Web client authentication (non-critical)
2025-09-03 15:15:38,801 [DEBUG] [] [main] [c.rabbitmq.client.impl.TlsUtils] - Peer's certificate chain entry subject: CN=R10,O=Let's Encrypt,C=US, subject alternative names: , issuer: CN=ISRG Root X1,O=Internet Security Research Group,C=US, not valid after: Fri Mar 12 23:59:59 GMT 2027, X.509 usage extensions: KeyUsage = digitalSignature/keyCertSign/cRLSign (critical), BasicConstraints = CA:TRUE (critical), 1.3.6.1.5.5.7.1.1 = 04:26:30:24:30:22:06:08:2B:06:01:05:05:07:30:02:86:16:68:74:74:70:3A:2F:2F:78:31:2E:69:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), SubjectKeyIdentifier = BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8 (non-critical), 2.5.29.31 = 04:20:30:1E:30:1C:A0:1A:A0:18:86:16:68:74:74:70:3A:2F:2F:78:31:2E:63:2E:6C:65:6E:63:72:2E:6F:72:67:2F (non-critical), 2.5.29.32 = 04:0C:30:0A:30:08:06:06:67:81:0C:01:02:01 (non-critical), AuthorityKeyIdentifier = keyid:79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E (non-critical), ExtendedKeyUsage = TLS Web client authentication/TLS Web server authentication (non-critical)
Example successfully started
2025-09-03 15:15:42,712 [WARN ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-0] [c.s.u.e.c.GlobalEventsListener] - Received a producer status change notification. Producer: 8, Reason: FirstRecoveryCompleted, isDown: false, isDelayed: false
2025-09-03 15:15:42,736 [WARN ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-3] [c.s.u.e.c.GlobalEventsListener] - Received a producer status change notification. Producer: 6, Reason: FirstRecoveryCompleted, isDown: false, isDelayed: false
2025-09-03 15:15:42,806 [WARN ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.GlobalEventsListener] - Received a producer status change notification. Producer: 12, Reason: FirstRecoveryCompleted, isDown: false, isDelayed: false
Exporting cache state to file
Closing the odds feed instance (10sec elapsed)
2025-09-03 15:15:50,599 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Received bet settlement for sport event MatchImpl{id=sr:match:63337811, locales=[en]} 
2025-09-03 15:15:50,599 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome sr:player:2039179 is a win
2025-09-03 15:15:50,599 [INFO ] [uf-sdk-32523-1] [uf-sdk-32523-1-amqp-t-2] [c.s.u.e.c.MessageListener-SingleSessionSetup] - Outcome sr:player:2036333 is a loss
2025-09-03 15:15:50,599 [INFO

Last updated

Was this helpful?