Files
example-soa-config/README.md
Yolando 53d14b8caf readme
2026-02-28 05:16:36 +07:00

4.4 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 100+ jenis transaksi (Kotran) dan setiap Kotran memiliki 30-40 field, melakukan hardcode menggunakan if-else di Java akan menghasilkan spaghetti code yang sulit di-maintain.

Dynamic SOA Mapper memecahkan masalah ini dengan pendekatan Metadata-Driven Architecture. Alih-alih menulis aturan mapping di dalam kode Java, seluruh aturan transformasi, operasi matematika, hingga pembentukan JSON berjenjang (nested JSON) disimpan di dalam tabel Database.

Jika ada perubahan format dari SOA, tim operasional cukup mengubah data di tabel konfigurasi tanpa perlu melakukan kompilasi kode atau deployment ulang (Zero Downtime).


Fitur Utama

  1. 100% Dynamic Rules: Menggunakan Spring Expression Language (SpEL) untuk memanipulasi data (string concatenation, matematika, ternary operator, format tanggal) langsung dari teks di database.
  2. Auto Nested-JSON (Dot Notation): Mendukung pembuatan JSON bertingkat tanpa mengubah struktur tabel. Cukup gunakan notasi titik pada konfigurasi (contoh: header.message.id), engine akan otomatis merakit objek JSON-nya.
  3. High Performance (SpEL Caching): Aturan SpEL di-parse dan disimpan dalam ConcurrentHashMap In-Memory Cache. Eksekusi mapping berjalan dalam hitungan mikrosekon (O(1)).
  4. Resilient & Fail-Safe: Dilengkapi dengan fitur Safe Navigation (mencegah NullPointerException), kolom Default Value (fallback jika data kosong), dan validasi Mandatory Field.

🏗️ Arsitektur & Cara Kerja

Saat endpoint API dipanggil dengan membawa transactionId dan kotran:

  1. Data Aggregation: Sistem menarik data sumber (Transaction dan Payment) dari database dan membungkusnya ke dalam StandardEvaluationContext.
  2. Fetch Configuration: Sistem mengambil daftar aturan mapping khusus untuk kotran tersebut dari tabel SOA_MAPPING_CONFIG.
  3. SpEL Evaluation: Engine melakukan iterasi pada setiap aturan, mengeksekusi expression_rule terhadap Context data sumber.
  4. JSON Assembly: Hasil evaluasi dirakit menjadi Map (mendukung nested berkat notasi titik) dan dikembalikan sebagai representasi JSON siap kirim.

💻 Panduan Penggunaan & Konfigurasi

1. Struktur Tabel Konfigurasi (SOA_MAPPING_CONFIG)

Ini adalah jantung dari project ini. Memahami cara mengisi tabel ini berarti menguasai seluruh mapping.

Kolom Penjelasan Contoh Pengisian
KOTRAN Kode transaksi sebagai pengelompokan rules. 1001, 1002, POS_PAYMENT
TARGET_FIELD_NM Nama key JSON tujuan. Gunakan titik (.) untuk nested object. TLBF01 atau header.msgId
TARGET_FIELD_TYPE Tipe data target (saat ini sebagai referensi dokumentasi). String, Number
EXPRESSION_RULE Aturan SpEL untuk mengambil/mengubah data dari objek sumber. #transaction.amount * 100
DEFAULT_VALUE Nilai fallback jika hasil evaluasi rule menghasilkan null. 0, NO_DATA
IS_MANDATORY 1 (Wajib). Jika evaluasi dan default null, sistem akan error. 0 (Opsional). 1, 0

2. Cheatsheet Penulisan Expression Rule (SpEL)

Dalam project ini, objek yang didaftarkan ke dalam Context adalah #transaction dan #payment.

  • Mapping Langsung: #payment.debitAccountNo
  • Hardcode Value: 'PT BUMI MAKMUR' (Gunakan kutip satu)
  • Operasi Matematika: #transaction.amount * 15000
  • Konkatenasi String: 'REF-' + #transaction.id
  • Format Tanggal: new java.text.SimpleDateFormat('yyyyMMdd').format(#transaction.effectiveDate)
  • Ternary Operator (If-Else): #transaction.status == 'SUCCESS' ? '00' : '99'
  • Safe Navigation (Anti-NPE): #transaction?.promoCode (Gunakan ?. jika curiga field tersebut bisa null)

🚀 Cara Menjalankan Aplikasi Lokal

Prasyarat:

  • Java 17 atau lebih baru
  • Maven 3.x
  • Database Oracle (atau ubah URL di application.yaml jika menggunakan database lain)

Langkah-langkah:

  1. Pastikan database Oracle menyala dan konfigurasi di src/main/resources/application.yaml sudah sesuai dengan username dan password lokalmu.
  2. Jalankan perintah Maven:
    ./mvnw spring-boot:run