IPF-SWIFT-AGI-GATEWAY Configuration
This document explains how to configure the IPF Swift AGI Gateway. It is broken up into various parts that need to be configured to communicate with IPF on one end, and Swift on the other end.
Configuration
Paths
| Transport | Config mount location |
|---|---|
Kafka |
/ipf-swift-agi-gateway-application-kafka/conf/ipf-swift-agi-gateway.conf |
IBM MQ |
/ipf-swift-agi-gateway/conf/ipf-swift-agi-gateway.conf |
LAU Configuration
LAU Keys configuration for IPF-SWIFT-AGI-GATEWAY consists of two parts, providing configuration file and updating keystore.
In configuration file ipf-swift-agi-gateway.conf we can set up/change properties which defines locations of LAU keys info .conf file, keystore and appropriate passwords. These parameters have defaults and they look like this:
lauKeys = {
keyStore = {
keyStorePath = "classpath:swiftAgiKeyStore.jks"
keyStorePassword = "keyStorePassword"
keyPassword = "keyPassword"
}
configPath = "classpath:swiftAgiKeyInfo.conf"
}
Key information file configuration
validity=P24M
overlap=PT12H
lauKeyInfos = [
{
id="keyA"
startDate="2017-12-17T09:30:47Z" #in ISO 8601 format
}
{
id="keyB"
startDate="2019-12-16T21:30:47Z"
}
]
This file contains additional information for LAU keys such as validity, overlap and start dates for each key, lauKeyInfos can have one or two elements.
Keystore configuration
The configuration also features a keystore which needs to include a SecretKeyEntry whose alias matches that of the LAU key ID in the configuration file described above. Be careful in this step because if ids from a file and alias you set in a keystore don’t match, the application will not be configured properly. You can use a combination of keytool to create/rename the existing SeretKeyEntry, and the com.iconsolutions.gateway.swift.crypto.LauKeystoreUpdater tool to update the LAU key in an existing keystore.
The LAU key is usually supplied as two parts: a "left" part and a "right" part. You need to concatenate the two parts and run the KeystoreSecretKeyUpdater to update an existing keystore to use the new LAU key. The key is really just a byte array and is provided to an application in HEX format.
Sample usage of the utility would be:
java -cp '[dir containing ipf-swift-agi-gateway-core-[version].jar]/*' com.iconsolutions.gateway.swift.crypto.LauKeystoreUpdater \
--pathToKeyStore [path to keystore] \
--keyStorePassword [keystore password] \
--secretKeyAlias [the alias of the existing LAU key to modify] \
--secretKey [the combined left and right parts of the LAU key] \
--secretKeyPassword [the key password]
Configuring communication with SWIFT AGI
Swift AGI may provide multiple IBM MQ Queue Manager connections to connect to. These can be configured in ipf-swift-agi-gateway.conf like this:
ipf-agi-jms = {
ibmmq {
truststore.path = "/path/to/my/truststore.p12"
truststore.password = "password"
truststore.type = "PKCS12"
keystore.path = "/path/to/my/keystore.p12"
keystore.password = "password"
keystore.type = "PKCS12"
}
gateways = [
{
jms-component-name = jmsOne
hostname = ibmmq-1
port = 1414
queue-manager = QM1
channel = C1.TO.QM1
ssl-enabled = true
}
{
jms-component-name = jmsTwo
hostname = ibmmq-2
port = 1415
queue-manager = QM2
channel = C1.TO.QM1.2
ssl-enabled = true
}
]
}
ipf-agi.jms-gateways = ["jmsOne", "jmsTwo"]
//queue names
ipf-agi.queue {
send-data = "AGI.SEND.DATA.QUEUE" // IPF AGI to Swift
receive-data = "AGI.RECEIVE.DATA.QUEUE" // Swift to IPF AGI
receive-ack = "AGI.RECEIVE.ACK.QUEUE" // Swift to IPF AGI
event = "AGI.EVENTS.DATA.QUEUE" // Swift to IPF AGI
}
Configuring client entity (processing entity) to DN mapping
The IPF Swift AGI gateway uses the concept of a distinguished name (DN) mapping to convert client entities (processing entities) from IPF to Swift DNs. The entity names ( name in the example below) are retrieved from the NETWORK_SENDER_ID value on incoming messages (to be sent to Swift), and the DNs ( value in the example below) are supplied by Swift. An example might be:
ipf-agi = {
client-entity-to-dn-mapping = [
{
name = "MyBank",
value ="cn=chasus33,ou=ips,o=swhqbebb,o=swift"
}
{
name = "EBA",
value ="cn=agi009,ou=csm,o=swhqbebb,o=swift"
}
]
}
Configuring communication with IPF: Kafka
IPF AGI supports Kafka and JMS (IBM MQ) when talking to the client e.g. IPF. You can configure the usual Kafka consumer/producer properties like so:
common-kafka-config {
bootstrap.servers = "kafka:9094"
ssl.keystore.location = /path/to/my/kafka.client.keystore.p12
ssl.keystore.password = password
ssl.truststore.location = /path/to/my/kafka.client.truststore.p12
ssl.truststore.password = password
ssl.key.password = password
security.protocol = SSL
}
akka.kafka.consumer.kafka-clients = ${common-kafka-config}
akka.kafka.producer.kafka-clients = ${common-kafka-config}
//topic names
ipf-agi.client {
topic {
send = "SCTI.SEND.QUEUE" // IPF to IPF AGI
receive = "SCTI.RECEIVE.QUEUE" // IPF AGI to IPF
outcome = "SCTI.OUTCOME.QUEUE" // IPF AGI to IPF
event = "AGI.EVENTS.DATA.QUEUE" // IPF AGI to [events consumer]
}
}
You can swap out authenticating with mTLS with Kerberos, add extra consumer/producer settings, split the configuration, etc. as you see fit.
Configuring communication with IPF: IBM MQ
The IPF Swift AGI application assumes that - when running in IBM MQ mode - the same queue manager is being used to communicate on both sides (client and AGI). Therefore no extra configuration is required. However, to configure the queue names (defaults shown):
ipf-agi.client = {
queue {
send = "SCTI.SEND.QUEUE" // IPF to IPF AGI
receive = "SCTI.RECEIVE.QUEUE" // IPF AGI to IPF
outcome = "SCTI.OUTCOME.QUEUE" // IPF AGI to IPF
event = "AGI.EVENTS.DATA.QUEUE" // IPF AGI to [events consumer]
}
}
Event Schema (Kafka only)
When running in Kafka mode, are published as JSON and have the following schema:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"eventCode": {
"type": "string"
},
"description": {
"type": "string"
},
"level": {
"type": "string"
},
"id": {
"type": "string"
},
"eventTime": {
"type": "string"
},
"payload": {
}
}
}
The payload field differs depending on the type of event published (see below)
List of Events
The IPF Swift AGI application publishes the following events:
| Event | Description | Event Code |
|---|---|---|
DNMappingMissing |
Raised when we can not map entity to DN (or vice versa) |
ipf.swift-agi-gateway.dn-mapping.missing |
DNMappingNotConfigured |
Is raised on application startup if there is no mapping configured for either ipf-agi.bank-entity-to-dn-mapping or _ipf-agi.client-entity-to-dn-mapping |
ipf.swift-agi-gateway.dn-mapping.not-configured |
InvalidHMAC |
Raised when we get ReceiveIndication message (a message received from SWIFT network) and calculated HMAC doesn’t match one from headers |
ipf.swift-agi-gateway.hmac.invalid |
NoHMACKeyId |
Raised when we don’t have matching LAU key configured so we can not perform HMAC calculation |
ipf.swift-agi-gateway.hmac.no-key-id |
NoLauKeysConfigured |
Raised when there is no LAU keys configured |
ipf.swift-agi-gateway.lau-keys.not-configured |
NoValidLauKeysConfigured |
Raised when there is no at least one LAU key valid |
ipf.swift-agi-gateway.lau-keys.not-valid |
NoValidLauKey |
Raised when ipf-agi receives a message, but there is no valid lau key to generate hmac |
ipf.swift-agi-gateway.lau-keys.no-valid-key |
ReceiveIndicationReceived |
Raised every time when new message (ReceiveIndication) is received from AGI network |
ipf.swift-agi-gateway.receive-indication.received-from-agi-network |
ReceiveIndicationSentToClient |
Raised every time after new message (ReceiveIndication) is received from AGI network, all checks are ok, and message is sent to a client |
ipf.swift-agi-gateway.receive-indication.sent-to-client |
SendRequestReceived |
Raised when IPF SWIFT AGI receives a message from the client (SendRequest), before sending message to AGI network |
ipf.swift-agi-gateway.send-request.received |
SendRequestSent |
Raised just before sending client message (SendRequest) to AGI network |
ipf.swift-agi-gateway.send-request.sent |
MQNotAvailable |
Raised when sending or receiving message from MQ fails because of MQ errors or unavailability |
ipf.swift-agi-gateway.mq.not-available |
TechnicalAckReceived |
Raised when an technical ack is received. This event is sent by remote side |
ipf.swift-agi-gateway.technical-ack |
NotifyReceived |
Raised when an notify is received. Notify is also sent by local AGI software |
ipf.swift-agi-gateway.notify |
MandatoryHeaderEmpty |
Raised when we get message from AGI Software, or client, and that message has missing headers |
ipf.swift-agi-gateway.mandatory-header.empty |
Example events
Here are some example event messages:
InvalidHMAC
{
"eventCode": "ipf.swift-agi-gateway.hmac.invalid",
"description": "IPF Swift AGI Gateway Event",
"level": "ERROR",
"id": "ec706af9-e91e-4916-8c4c-af2a6a57887b",
"eventTime": "2024-04-05T11:05:30.098989459Z",
"payload": {
"JMS_IBM_Character_Set": "UTF-8",
"JMSMessageID": "ID:414d5120514d31202020202020202020e8da0f660e0c0b23",
"HMAC": "NotValidHmac",
"JMSRedelivered": false,
"JMS_IBM_Encoding": 273,
"MsgNetworkRef": "0be9545b-8652-4555-a577-3826ac8ffa8b",
"JMSDeliveryMode": 2,
"JMS_IBM_PutApplType": 28,
"SendTimestamp": "2018-08-13T12:15:54.651Z",
"JMS_IBM_Format": " ",
"JMSXDeliveryCount": 1,
"Version": "1",
"PrimitiveType": "ReceiveIndication",
"JMS_IBM_PutTime": "11053007",
"MsgRef": "VqjJHgXnz366Ud3KErx7mnJd9QDba330Dsk",
"JMS_IBM_MsgType": 8,
"JMSExpiration": 0,
"HMACKeyId": "keyB",
"JMSXUserID": "app ",
"JMSTimestamp": 1712315130075,
"Service": "csm.msg.ins",
"Receiver": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"JMSXAppID": "er-20240405110452635_302.jar",
"ReceiveTimestamp": "2018-08-13T12:15:54.726Z",
"Sender": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"JMSPriority": 4,
"JMS_IBM_PutDate": "20240405",
"JMSDestination": {
"CCSID": 1208,
"brokerCCDurSubQueue": "SYSTEM.JMS.D.CC.SUBSCRIBER.QUEUE",
"JMS_IBM_Unmappable_Action": "REPORT",
"failIfQuiesce": 1,
"destDescription": null,
"alternateUserId": null,
"readAheadClosePolicy": 2,
"JMS_IBM_Unmappable_Replacement": 63,
"mdWriteEnabled": false,
"XMSC_WMQ_QUEUE_MANAGER": "",
"timeToLive": -2,
"putAsyncAllowed": -1,
"deliveryMode": -2,
"readAheadAllowed": -1,
"XMSC_DESTINATION_NAME": "AGI.RECEIVE.DATA.QUEUE",
"wildcardFormat": 0,
"mdReadEnabled": false,
"messageBody": 2,
"XMSC_WMQ_BROKER_PUBQ": "",
"XMSC_ADMIN_OBJECT_TYPE": 33,
"priority": -2,
"encoding": 273,
"brokerVersion": 0,
"version": 7,
"brokerDurSubQueue": "SYSTEM.JMS.D.SUBSCRIBER.QUEUE",
"XMSC_CONNECTION_TYPE_NAME": "com.ibm.msg.client.jakarta.wmq",
"XMSC_WMQ_REPLYTO_STYLE": 0,
"targetClient": 0,
"mdMessageContext": 0,
"XMSC_WMQ_BROKER_PUBQ_QMGR": "",
"XMSC_CONNECTION_TYPE": 5
},
"messagePayload": "{\"content\":\"xtjubHNdsBEtmySAnAUXRRTTffeWTpyyzChOeOOkludqmBGQdluFmHsZZmcMmIiicbLWYBVXkgUnGDtfWzkBQbBsJUHGBNLfHPwY\"}"
}
}
NoValidLauKeysConfigured
{
"eventCode": "ipf.swift-agi-gateway.lau-keys.not-valid",
"description": "IPF Swift AGI Gateway Event",
"level": "ERROR",
"id": "4febbca7-225c-4cf7-abcc-23f2835e1377",
"eventTime": "2024-04-05T11:05:13.626138341Z",
"payload": {
"invalidLauKeys": [
{
"id": "keyB",
"key": {
"algorithm": "HmacSHA256",
"encoded": "bdVRpMsSZSgzVjf56+1fEQ==",
"format": "RAW",
"destroyed": false
},
"validFrom": "2017-06-16T21:30:47Z",
"validTo": "2019-06-16T21:30:47Z",
"valid": false
},
{
"id": "keyA",
"key": {
"algorithm": "HmacSHA256",
"encoded": "bfVRpMoSZSgzVjf56+1fmA==",
"format": "RAW",
"destroyed": false
},
"validFrom": "2015-12-17T09:30:47Z",
"validTo": "2017-06-17T09:30:47Z",
"valid": false
}
]
}
}
ReceiveIndicationReceived
{
"eventCode": "ipf.swift-agi-gateway.receive-indication.received-from-agi-network",
"description": "IPF Swift AGI Gateway Event",
"level": "INFO",
"id": "91ac6d40-2483-425b-91b0-8de4f77db658",
"eventTime": "2024-04-05T11:05:28.041257893Z",
"payload": {
"JMS_IBM_Character_Set": "UTF-8",
"JMSMessageID": "ID:414d5120514d31202020202020202020e8da0f6603080b23",
"HMAC": "sde5gvCTSKiShmQfJWlxLMm4J0JVxDONHPsBJ++MMOs=",
"JMSRedelivered": false,
"JMS_IBM_Encoding": 273,
"MsgNetworkRef": "0be9545b-8652-4555-a577-3826ac8ffa8b",
"JMSDeliveryMode": 2,
"JMS_IBM_PutApplType": 28,
"SendTimestamp": "2018-08-13T12:15:54.651Z",
"JMS_IBM_Format": " ",
"JMSXDeliveryCount": 1,
"Version": "1",
"PrimitiveType": "ReceiveIndication",
"JMS_IBM_PutTime": "11052801",
"MsgRef": "",
"JMS_IBM_MsgType": 8,
"JMSExpiration": 0,
"HMACKeyId": "keyA",
"JMSXUserID": "app ",
"JMSTimestamp": 1712315128006,
"Service": "csm.msg.ins",
"Receiver": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"JMSXAppID": "er-20240405110452635_302.jar",
"ReceiveTimestamp": "2018-08-13T12:15:54.726Z",
"Sender": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"JMSPriority": 4,
"JMS_IBM_PutDate": "20240405",
"JMSDestination": {
"CCSID": 1208,
"brokerCCDurSubQueue": "SYSTEM.JMS.D.CC.SUBSCRIBER.QUEUE",
"JMS_IBM_Unmappable_Action": "REPORT",
"failIfQuiesce": 1,
"destDescription": null,
"alternateUserId": null,
"readAheadClosePolicy": 2,
"JMS_IBM_Unmappable_Replacement": 63,
"mdWriteEnabled": false,
"XMSC_WMQ_QUEUE_MANAGER": "",
"timeToLive": -2,
"putAsyncAllowed": -1,
"deliveryMode": -2,
"readAheadAllowed": -1,
"XMSC_DESTINATION_NAME": "AGI.RECEIVE.DATA.QUEUE",
"wildcardFormat": 0,
"mdReadEnabled": false,
"messageBody": 2,
"XMSC_WMQ_BROKER_PUBQ": "",
"XMSC_ADMIN_OBJECT_TYPE": 33,
"priority": -2,
"encoding": 273,
"brokerVersion": 0,
"version": 7,
"brokerDurSubQueue": "SYSTEM.JMS.D.SUBSCRIBER.QUEUE",
"XMSC_CONNECTION_TYPE_NAME": "com.ibm.msg.client.jakarta.wmq",
"XMSC_WMQ_REPLYTO_STYLE": 0,
"targetClient": 0,
"mdMessageContext": 0,
"XMSC_WMQ_BROKER_PUBQ_QMGR": "",
"XMSC_CONNECTION_TYPE": 5
},
"messagePayload": "{\"content\":\"xGmpxiEMwpNVKfAcdKbvKYLyUFQheCqBXKWIzxMMNkGjGRMBVrDRkvcTUQOKLhLTQrseIvwNtruEpxkxqTvgyPtcwcTqMBPbkUjC\"}"
}
}
SendRequestSent
{
"eventCode": "ipf.swift-agi-gateway.send-request.sent",
"description": "IPF Swift AGI Gateway Event",
"level": "INFO",
"id": "f6b4b640-b89f-472f-b9a4-48abbea7d7ea",
"eventTime": "2024-04-05T11:05:30.293994531Z",
"payload": {
"HMAC": "nj+OfKbNew7R/5sCWZAFCFP6MeGUCRPdoiSQ2PkNJyE=",
"HMACKeyId": "keyB",
"Service": "csm.msg.ins",
"Receiver": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"TechnicalAckRequired": "A",
"Sender": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"Version": "1",
"messagePayload": "eyJjb250ZW50IjoiWWhiYmp1TktkYVNveVRleXNHaFhER0daQ09CSmRKaUpQa1hmS3JkcWFhZExmb0dscUZEbGdLY29wT01wUHN4c21SbXlOcnVYVmVWSHNEZVR4dnhnTWdQV0VvVFdmU0hjVnJwYyJ9",
"PossibleDuplicate": "N",
"PrimitiveType": "SendRequest",
"MsgRef": "CFqdIbdpZMkFaPSBys3pWfRuCieX86AIiUO",
"NotificationRequired": "A"
}
}
NotifyReceived (failure)
{
"eventCode": "ipf.swift-agi-gateway.notify",
"description": "IPF Swift AGI Gateway Event",
"level": "ERROR",
"id": "04c2bc17-7b8e-42ca-9616-97158c95aff7",
"eventTime": "2024-04-05T11:05:30.694896246Z",
"payload": {
"JMS_IBM_Character_Set": "UTF-8",
"JMSMessageID": "ID:414d5120514d32202020202020202020e8da0f6608170125",
"HMAC": "fiZfR0sNH1+dkWwxuTVJ9k6GUk67twIGBz7nofK1J0g=",
"JMSRedelivered": false,
"JMS_IBM_Encoding": 273,
"MsgNetworkRef": "0be9545b-8652-4555-a577-3826ac8ffa8b",
"JMSDeliveryMode": 2,
"JMS_IBM_PutApplType": 28,
"SendTimestamp": "2018-08-13T12:15:54.651Z",
"JMS_IBM_Format": " ",
"JMSXDeliveryCount": 1,
"Version": "1",
"PrimitiveType": "Notify",
"JMS_IBM_PutTime": "11053067",
"CorrelationId": "UzQZ2V6BTU14N0SRYvVe771rXn78Tg2mTkq",
"MsgRef": "UzQZ2V6BTU14N0SRYvVe771rXn78Tg2mTkq",
"JMS_IBM_MsgType": 8,
"JMSExpiration": 0,
"HMACKeyId": "keyB",
"PrimitiveErrorText": "error text",
"JMSXUserID": "app ",
"JMSTimestamp": 1712315130678,
"Service": "csm.msg.ins",
"Receiver": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"PrimitiveErrorCode": "status_code",
"JMSXAppID": "er-20240405110452635_302.jar",
"ReceiveTimestamp": "2018-08-13T12:15:54.726Z",
"Sender": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"JMSPriority": 4,
"JMS_IBM_PutDate": "20240405",
"JMSDestination": {
"CCSID": 1208,
"brokerCCDurSubQueue": "SYSTEM.JMS.D.CC.SUBSCRIBER.QUEUE",
"JMS_IBM_Unmappable_Action": "REPORT",
"failIfQuiesce": 1,
"destDescription": null,
"alternateUserId": null,
"readAheadClosePolicy": 2,
"JMS_IBM_Unmappable_Replacement": 63,
"mdWriteEnabled": false,
"XMSC_WMQ_QUEUE_MANAGER": "",
"timeToLive": -2,
"putAsyncAllowed": -1,
"deliveryMode": -2,
"readAheadAllowed": -1,
"XMSC_DESTINATION_NAME": "AGI.RECEIVE.ACK.QUEUE",
"wildcardFormat": 0,
"mdReadEnabled": false,
"messageBody": 2,
"XMSC_WMQ_BROKER_PUBQ": "",
"XMSC_ADMIN_OBJECT_TYPE": 33,
"priority": -2,
"encoding": 273,
"brokerVersion": 0,
"version": 7,
"brokerDurSubQueue": "SYSTEM.JMS.D.SUBSCRIBER.QUEUE",
"XMSC_CONNECTION_TYPE_NAME": "com.ibm.msg.client.jakarta.wmq",
"XMSC_WMQ_REPLYTO_STYLE": 0,
"targetClient": 0,
"mdMessageContext": 0,
"XMSC_WMQ_BROKER_PUBQ_QMGR": "",
"XMSC_CONNECTION_TYPE": 5
},
"messagePayload": "{\"content\":\"HhZvwtQeDlngEBNKnECjfxAgMkMgUjhceTHagKVPyMaoHPmKgltQdRphVnguUlrVsjhvCiFOClQXXJOkbbPlMqHxzUgPBlezFolT\"}",
"PrimitiveReturnCode": "Fatal"
}
}
NotifyReceived (success)
{
"eventCode": "ipf.swift-agi-gateway.notify",
"description": "IPF Swift AGI Gateway Event",
"level": "INFO",
"id": "fbb58aff-79f2-4d96-9a73-2d524c88cb5d",
"eventTime": "2024-04-05T11:05:30.760903994Z",
"payload": {
"JMS_IBM_Character_Set": "UTF-8",
"JMSMessageID": "ID:414d5120514d32202020202020202020e8da0f660a170125",
"HMAC": "52Yp1RErpnlvCC6O2UGlPeo3SyyujNbv6BfdG3QCimw=",
"JMSRedelivered": false,
"JMS_IBM_Encoding": 273,
"MsgNetworkRef": "3lQ237fra8nBOCipcEio1PiHPWBOPy14Ctx",
"JMSDeliveryMode": 2,
"JMS_IBM_PutApplType": 28,
"SendTimestamp": "2018-08-13T12:15:54.651Z",
"JMS_IBM_Format": " ",
"JMSXDeliveryCount": 1,
"Version": "1",
"PrimitiveType": "Notify",
"JMS_IBM_PutTime": "11053074",
"CorrelationId": "3lQ237fra8nBOCipcEio1PiHPWBOPy14Ctx",
"MsgRef": "3lQ237fra8nBOCipcEio1PiHPWBOPy14Ctx",
"JMS_IBM_MsgType": 8,
"JMSExpiration": 0,
"HMACKeyId": "keyB",
"JMSXUserID": "app ",
"JMSTimestamp": 1712315130742,
"Service": "<service>",
"Receiver": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"JMSXAppID": "er-20240405110452635_302.jar",
"Sender": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"JMSPriority": 4,
"JMS_IBM_PutDate": "20240405",
"JMSDestination": {
"CCSID": 1208,
"brokerCCDurSubQueue": "SYSTEM.JMS.D.CC.SUBSCRIBER.QUEUE",
"JMS_IBM_Unmappable_Action": "REPORT",
"failIfQuiesce": 1,
"destDescription": null,
"alternateUserId": null,
"readAheadClosePolicy": 2,
"JMS_IBM_Unmappable_Replacement": 63,
"mdWriteEnabled": false,
"XMSC_WMQ_QUEUE_MANAGER": "",
"timeToLive": -2,
"putAsyncAllowed": -1,
"deliveryMode": -2,
"readAheadAllowed": -1,
"XMSC_DESTINATION_NAME": "AGI.RECEIVE.ACK.QUEUE",
"wildcardFormat": 0,
"mdReadEnabled": false,
"messageBody": 2,
"XMSC_WMQ_BROKER_PUBQ": "",
"XMSC_ADMIN_OBJECT_TYPE": 33,
"priority": -2,
"encoding": 273,
"brokerVersion": 0,
"version": 7,
"brokerDurSubQueue": "SYSTEM.JMS.D.SUBSCRIBER.QUEUE",
"XMSC_CONNECTION_TYPE_NAME": "com.ibm.msg.client.jakarta.wmq",
"XMSC_WMQ_REPLYTO_STYLE": 0,
"targetClient": 0,
"mdMessageContext": 0,
"XMSC_WMQ_BROKER_PUBQ_QMGR": "",
"XMSC_CONNECTION_TYPE": 5
},
"messagePayload": "{\"content\":\"zBezYRohFAVEOevSRxwcNTeWEXnyoQhqYaOESoomsRsPPweyHjsKWjtRWBoaDmoMsGvHJxkkjWPNITvkojORFtOfemOUXnmqgFgY\"}",
"PrimitiveReturnCode": "Success"
}
}
TechnicalAckReceived (success)
{
"eventCode": "ipf.swift-agi-gateway.technical-ack",
"description": "IPF Swift AGI Gateway Event",
"level": "INFO",
"id": "b1c499b5-cda6-46fb-94ad-3b6f8a66534d",
"eventTime": "2024-04-05T11:05:30.898883257Z",
"payload": {
"JMS_IBM_Character_Set": "UTF-8",
"JMSMessageID": "ID:414d5120514d31202020202020202020e8da0f66180c0b23",
"HMAC": "gy2+jkznrjlbQq3FYRTpSjxmRVdM/lBFD1slHuT/TrU=",
"JMSRedelivered": false,
"JMS_IBM_Encoding": 273,
"MsgNetworkRef": "2rjcfWu5sBxqSA57s5bQL8nKwhaKJdquZld",
"JMSDeliveryMode": 2,
"JMS_IBM_PutApplType": 28,
"SendTimestamp": "2018-08-13T12:15:54.651Z",
"JMS_IBM_Format": " ",
"JMSXDeliveryCount": 1,
"Version": "1",
"PrimitiveType": "TechnicalAck",
"JMS_IBM_PutTime": "11053089",
"CorrelationId": "2rjcfWu5sBxqSA57s5bQL8nKwhaKJdquZld",
"MsgRef": "2rjcfWu5sBxqSA57s5bQL8nKwhaKJdquZld",
"JMS_IBM_MsgType": 8,
"JMSExpiration": 0,
"HMACKeyId": "keyB",
"JMSXUserID": "app ",
"JMSTimestamp": 1712315130892,
"Service": "<service>",
"Receiver": "cn=agi009,ou=bank,o=swhqbebb,o=swift",
"MsgType": "PACS.008.001.03",
"JMSXAppID": "er-20240405110452635_302.jar",
"Sender": "cn=agi009,ou=csm,o=swhqbebb,o=swift",
"JMSPriority": 4,
"JMS_IBM_PutDate": "20240405",
"JMSDestination": {
"CCSID": 1208,
"brokerCCDurSubQueue": "SYSTEM.JMS.D.CC.SUBSCRIBER.QUEUE",
"JMS_IBM_Unmappable_Action": "REPORT",
"failIfQuiesce": 1,
"destDescription": null,
"alternateUserId": null,
"readAheadClosePolicy": 2,
"JMS_IBM_Unmappable_Replacement": 63,
"mdWriteEnabled": false,
"XMSC_WMQ_QUEUE_MANAGER": "",
"timeToLive": -2,
"putAsyncAllowed": -1,
"deliveryMode": -2,
"readAheadAllowed": -1,
"XMSC_DESTINATION_NAME": "AGI.RECEIVE.ACK.QUEUE",
"wildcardFormat": 0,
"mdReadEnabled": false,
"messageBody": 2,
"XMSC_WMQ_BROKER_PUBQ": "",
"XMSC_ADMIN_OBJECT_TYPE": 33,
"priority": -2,
"encoding": 273,
"brokerVersion": 0,
"version": 7,
"brokerDurSubQueue": "SYSTEM.JMS.D.SUBSCRIBER.QUEUE",
"XMSC_CONNECTION_TYPE_NAME": "com.ibm.msg.client.jakarta.wmq",
"XMSC_WMQ_REPLYTO_STYLE": 0,
"targetClient": 0,
"mdMessageContext": 0,
"XMSC_WMQ_BROKER_PUBQ_QMGR": "",
"XMSC_CONNECTION_TYPE": 5
},
"messagePayload": "{\"content\":\"RgxPDSFyOWuSTmwymHyVFpvZWbrffNgFKyZLOOCCfOYsdFvHlgJGFuPuTzFUvSRzXHoBAIJdfuMqFyBCsDEugYkckoPvoSCtbKpE\"}",
"PrimitiveReturnCode": "Success"
}
}