4.0 KiB
🚀 Dynamic SOA Mapper (Configuration-Driven Payload Engine)
📖 Apa itu Dynamic SOA Mapper?
Dalam sistem integrasi perbankan/Enterprise, memetakan data internal ke format JSON yang diminta oleh Service Oriented Architecture (SOA) seringkali memakan waktu. Jika ada 120+ jenis transaksi (Kotran), dan setiap Kotran memiliki puluhan field hingga struktur Array, melakukan hardcode di Java akan menghasilkan spaghetti code yang sulit di-maintain.
Dynamic SOA Mapper memecahkan masalah ini dengan pendekatan Metadata-Driven Architecture. Seluruh aturan transformasi, operasi matematika, pembentukan JSON berjenjang (nested), hingga pembuatan JSON Array diserahkan 100% kepada konfigurasi di tabel Database menggunakan Spring Expression Language (SpEL).
✨ Fitur Utama
- 100% Dynamic Rules: Menggunakan SpEL untuk manipulasi data (string concatenation, matematika, ternary operator, format tanggal) langsung dari teks di database tanpa deploy ulang (Zero Downtime).
- Global Configuration: Mendukung Kotran
GLOBALuntuk mendefinisikan Header atau field statis yang otomatis digabungkan (merged) ke seluruh request Kotran lainnya. Sangat DRY (Don't Repeat Yourself)! - Auto Nested-JSON (Dot Notation): Cukup gunakan titik pada konfigurasi (contoh:
header.message.id), engine otomatis merakit struktur JSON bertingkat. - JSON Array Support: Mendukung pembuatan Array of Objects (List of Maps) secara dinamis hanya dari satu baris konfigurasi teks.
- High Performance: Aturan SpEL di-parse dan di-cache (ConcurrentHashMap). Eksekusi mapping berjalan dalam hitungan mikrosekon (O(1)).
- Resilient & Fail-Safe: Dilengkapi dengan fitur Safe Navigation (mencegah NPE), Default Value (fallback), dan validasi Mandatory Field.
🏗️ Arsitektur & Cara Kerja
Saat endpoint API dipanggil (misal: Kotran 1001):
- Data Aggregation: Sistem menarik data (
Transaction,Payment) dan menyimpannya keStandardEvaluationContext. - Fetch & Merge Configuration: Sistem mengambil aturan
GLOBALdan aturan spesifik1001dari tabelSOA_MAPPING_CONFIG, lalu menggabungkannya. - SpEL Evaluation: Engine mengeksekusi
expression_ruleterhadap Context data sumber. - JSON Assembly: Hasil diekstrak menjadi Map dan List (termasuk nested), lalu dikembalikan sebagai JSON utuh.
💻 Panduan Penggunaan & Konfigurasi
1. Struktur Tabel Konfigurasi (SOA_MAPPING_CONFIG)
Ini adalah jantung dari mapping engine ini.
| Kolom | Penjelasan | Contoh Pengisian |
|---|---|---|
KOTRAN |
Kode transaksi. Gunakan GLOBAL untuk rule yang berlaku di semua Kotran. |
GLOBAL, 1001, 1304 |
TARGET_FIELD_NM |
Nama key JSON tujuan. Gunakan titik (.) untuk nested object. |
messageHeader.tellerId |
TARGET_FIELD_TYPE |
Tipe data target (saat ini sebagai referensi dokumentasi). | String, Number, List |
EXPRESSION_RULE |
Aturan SpEL untuk mengambil/mengubah data. | #transaction.amount * 100 |
DEFAULT_VALUE |
Nilai fallback jika hasil evaluasi rule bernilai null. |
0, NO_DATA |
IS_MANDATORY |
1 (Wajib). Jika evaluasi dan default null, sistem akan throw Error. |
1, 0 |
2. Cheatsheet Penulisan Expression Rule (SpEL)
Objek yang tersedia di dalam Context saat ini adalah: #transaction dan #payment.
- Mapping Langsung:
#payment.debitAccountNo - Hardcode Value:
'PT BUMI MAKMUR'(Gunakan kutip satu) - Matematika & Logika:
#transaction.amount * 15000 - Format Tanggal:
new java.text.SimpleDateFormat('yyyyMMdd').format(#transaction.effectiveDate) - Ternary (If-Else):
#transaction.status == 'SUCCESS' ? '00' : '99' - Safe Navigation (Anti-NPE):
#transaction?.promoCode
3. Panduan Membuat JSON Array (Array of Objects)
Jika SOA meminta format JSON Array seperti ini:
"property": [
{ "key": "teller", "value": "811" },
{ "key": "trxId", "value": "TRX-123" }
]