πŸ”§ JMS API Troubleshooting Guide

Document Version: 1.2
Effective Date: July 25, 2025
Prepared By: EXTIO Support Team

1. Introduction

Purpose: This guide provides a structured approach to troubleshooting JMS API connectivity and functionality issues. Follow the steps sequentially for optimal results.

This comprehensive troubleshooting guide is designed to help technical teams diagnose and resolve common JMS API issues quickly and efficiently. The guide follows a systematic approach starting with basic sanity checks and progressing to detailed API testing procedures.

2. Sanity Checks

2.1 Access Kubernetes Environment

Prerequisites: Ensure you have proper SSH access and kubectl permissions before proceeding.

πŸ–₯️ Terminal Commands
# Connect to control server
ssh cont160150

# Switch to UAT namespace
source ke-msb-uat
Connection Image

2.2 Verify Pod Status

What to look for: Pods should be in "Running" state. Check for any restart loops or error conditions.

☸️ Kubectl Commands
# List JMS service pods
kubectl get pods | grep az-int-flexjmsservice

# Get detailed pod information
kubectl describe pod <pod-name>
Connection Image

2.3 Load Balancer Verification

Health Check: Verify load balancer configuration and test connectivity to backend services.

βš–οΈ Load Balancer Commands
# Access load balancer
ssh -p 7779 10.0.1.59

# Check HAProxy configuration
cat /etc/haproxy/haproxy.cfg | grep -C15 2235

# Test connectivity
telnet 10.137.161.200 2235

# Check service status
systemctl status haproxy
Connection Image

3. API Testing

3.1 Execute API Request

Important: Ensure the XML payload is properly formatted. The data section should contain the complete SOAP envelope structure, not just raw field values.

🌐 cURL API Request
curl --location 'https://10.137.160.59:38443/dtb-gateway/DTBK/Sandbox-DSBCustomerService/1.0' \
--header 'SOAPAction: CreateRetailKYC' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: cecd9d79-915e-4a30-b5a1-7279f7648126' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJDT0Z3OG9Hc3dLOWJESl9oMHdfdUZVVmZaR0NESGhkT0pmRjNLbGRBSGRjIn0.eyJqdGkiOiJjYWNjMjkzYi0yN2UwLTQ1NWQtYjZhNS1lZjBmNmQwZTU4OTMiLCJleHAiOjE3ODI4MDE2ODQsIm5iZiI6MCwiaWF0IjoxNzUxMjY1Njg0LCJpc3MiOiJodHRwOi8vMTAuMTM3LjE2MC41OTozMDMwL2F1dGgvcmVhbG1zL0RUQktBUElHVyIsImF1ZCI6IktFQVBJQ2xpZW50Iiwic3ViIjoiMmExOWY5ODQtNmU1ZC00OTRiLWI1YjAtY2FmM2IyOWQ0MGEzIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiS0VBUElDbGllbnQiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIzMmQzMTkzZC03Nzg0LTMzYWQtYjM3YS1jYWY5MmQ3NWNkOWYiLCJhY3IiOiIxIiwiY2xpZW50X3Nlc3Npb24iOiI4ZDhlY2Y0Zi1lYjIyLTQxN2UtODNiZS01Y2Y4MWJhNWNlODUiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiS0VGaW9yYW5vQXBwUm9sZSIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsInZpZXctcHJvZmlsZSJdfX0sIm5hbWUiOiJLRSBGaW9yYW5vIEFwcCBVc2VyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoia2VfZmlvcmFub19hcHBfdXNlciIsImdpdmVuX25hbWUiOiJLRSBGaW9yYW5vIEFwcCIsImZhbWlseV9uYW1lIjoiVXNlciIsImVtYWlsIjoia2VfZmlvcmFub19hcHBfdXNlckBkdGJhZnJpY2EuY29tIn0.X4bfT97mSL2hqloGnRW9i539oqXRf0ROypF5qZBJ8u1wZ6KlTYhA7bs4k_iOsqbNTGTxtrDVPaJ7McIOuLGg049Evl_JsWgI0L59j9nY3oGM_Mz8b12Pi7hGQusPKjHIcD5K-NPbiQ10VhkP-gVMma7mpAm_icd1UsUtu3ryt_Ee4N7qqHdzpLEPv-ugmW84uB1Frj7kXeeGLDtR9x1nE-2SlMUxpD4NXMdc2C6YpH_lrjFOvrrek0UyrKoGuk-6IMOf4-hJaKIr7GWOGmx0N6wPNFyll5xbtwHe9AYn9GRR0X8A0mPBjYhqnoAh9pN91l2tv-pGtCD5NQ7zJjvg' \
--header 'Cookie: SERVERID=LBS-FCUBS-FIGSUAT-M1-server1; SERVERID=LBS-FCUBS-FIGSUAT-M1-server1' \
--data '<?xml version="1.0" encoding="UTF-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

  <s:Header />

  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <DSB_KYCRETAIL_REQ xmlns="http://com.dtbafrica.dsbflex.customerservice/service/DSBCustomerService">

      <DSB_HEADER>
        <SOURCE>XMLSYBRIN</SOURCE>
        <XREF>{{msgId}}</XREF>
        <USER_ID>XMLSYB</USER_ID>
        <PASSWORD>{{encryptedPassword}}</PASSWORD>
        <SERVICE>FCUBSCustomerService</SERVICE>
        <OPERATION>CreateKYC</OPERATION>
      </DSB_HEADER>

      <DSB_BODY>
        <KYC_MASTER_FULL>
          <CUSTOMER_FULL_NAME>JOHN DOE</CUSTOMER_FULL_NAME>
          <KYC_CUSTOMER_TYPE>R</KYC_CUSTOMER_TYPE>
          <RISK_LEVEL>Level1</RISK_LEVEL>

          <KYC_RETAIL>
            <DECLARED />
            <RESIDENT>Y</RESIDENT>
            <PEP>N</PEP>
            <LOCAL_ADDRESS>BUSIBWABO BUSIA</LOCAL_ADDRESS>
            <LOCAL_ADDR_CNTRY>KE</LOCAL_ADDR_CNTRY>
            <HOME_CNTRY_ADDRESS>BUSIBWABO BUSIA</HOME_CNTRY_ADDRESS>
            <HOME_ADDR_CNTRY>KE</HOME_ADDR_CNTRY>
            <US_RESIDENT>N</US_RESIDENT>
            <VISITED_US_PREV>N</VISITED_US_PREV>
            <NATIONALITY>KE</NATIONALITY>
            <BIRTH_PLACE>NAROBI</BIRTH_PLACE>
            <BIRTH_COUNTRY>KE</BIRTH_COUNTRY>
            <BIRTH_DATE>1994-12-24</BIRTH_DATE>
            <MOBILE_ISD_CODE>254</MOBILE_ISD_CODE>
            <MOBILE_TEL_NUMBER>0712345678</MOBILE_TEL_NUMBER>
            <ACCOUNT_PURPOSE>414-11</ACCOUNT_PURPOSE>
            <ACCOUNT_TYPE>INDIVIDUAL</ACCOUNT_TYPE>
            <PASSPORT_NUMBER />
            <PASSPORT_EXPIRY_DATE />
            <KYC_CURRENCY>KES</KYC_CURRENCY>
            <POA>N</POA>
            <INCOME_SALARY>N</INCOME_SALARY>
            <INCOME_RENTAL>N</INCOME_RENTAL>
            <INCOME_INVESTMENT>N</INCOME_INVESTMENT>
            <INCOME_BUSINESS>N</INCOME_BUSINESS>
            <INCOME_PROF_BIZ>N</INCOME_PROF_BIZ>
            <INCOME_OVERSEAS>N</INCOME_OVERSEAS>
            <TOTAL_INCOME>0</TOTAL_INCOME>
            <TOTAL_NET_WORTH>0</TOTAL_NET_WORTH>
            <KYC_COMMENT>BENARD OLAGE</KYC_COMMENT>
            <SALES_OFF_COMMENT>BENARD OLAGE</SALES_OFF_COMMENT>
            <APPROVERS_COMMENT>MAWINDA</APPROVERS_COMMENT>
          </KYC_RETAIL>

        </KYC_MASTER_FULL>
      </DSB_BODY>

    </DSB_KYCRETAIL_REQ>
  </s:Body>

</s:Envelope>'
Connection Image

3.2 Pre-request Script

Postman Setup: Add this script to your Postman collection's pre-request script section to automatically generate encrypted passwords.

πŸ“ JavaScript Pre-request Script
// Generate random message ID (16 characters)
let msgId = '';
for (let i = 0; i < 16; i++) {
  msgId += pm.variables.replaceIn('{{$randomAlphaNumeric}}');
}
pm.variables.set("msgId", msgId);

// Encrypt password using Triple DES
const password = "ORACLE1";
const hashed = CryptoJS.SHA512(msgId);
const keyHex = CryptoJS.enc.Hex.parse(hashed.toString().substring(0, 48));
const iv = CryptoJS.enc.Hex.parse("0000000000000000");

const encrypted = CryptoJS.TripleDES.encrypt(password, keyHex, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
});

const encryptedBase64 = encrypted.toString();
pm.environment.set("encryptedPassword", encryptedBase64);

console.log("Generated msgId:", msgId);
console.log("Encrypted password set successfully");
Connection Image

4. Appendix

4.1 Sample Responses

Success Response: Example of a successful KYC creation response

βœ… Successful API Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<dsb:DSB_KYCRETAIL_RES xmlns:dsb="http://com.dtbafrica.dsbflex.customerservice/service/DSBCustomerService">
<dsb:DSB_HEADER>
<dsb:SOURCE>XMLSYBRIN</dsb:SOURCE>
<dsb:XREF>vbt5yr5x9cxw0ore</dsb:XREF>
<dsb:USER_ID>XMLSYB</dsb:USER_ID>
<dsb:PASSWORD>XXXXXXXXXXXXXXXX</dsb:PASSWORD>
<dsb:SERVICE>FCUBSCustomerService</dsb:SERVICE>
<dsb:OPERATION>CreateKYC</dsb:OPERATION>
<dsb:MESSAGE_STATUS>SUCCESS</dsb:MESSAGE_STATUS>
</dsb:DSB_HEADER>
<dsb:DSB_BODY>
<dsb:KYC_MASTER_FULL>
<dsb:KYC_REFERENCE_NUM>000ZKYC25170Z8WH</dsb:KYC_REFERENCE_NUM>
<dsb:CUSTOMER_FULL_NAME>JOHN DOE</dsb:CUSTOMER_FULL_NAME>
<dsb:KYC_CUSTOMER_TYPE>R</dsb:KYC_CUSTOMER_TYPE>
<dsb:RISK_LEVEL>Level1</dsb:RISK_LEVEL>
</dsb:KYC_MASTER_FULL>
</dsb:DSB_BODY>
</dsb:DSB_KYCRETAIL_RES>
</soap:Body>
</soap:Envelope>