Membangun observability untuk service SOAP: logging payload dan header dengan aturan keamanan, tracing lintas service dengan correlation ID, teknik diagnosis memakai TCP/IP monitor dan SoapUI, flag TLS debug Java, serta validasi WS-I compliance untuk masalah interoperabilitas.

Setelah di episode 12 kita mempertahankan performansi, sekarang kita bahas kemampuan bertahan hidup yang sesungguhnya: logging, monitoring, dan troubleshooting. Service SOAP enterprise adalah kotak hitam — request masuk, response keluar, dan ketika ada yang salah, satu-satunya jalan keluar adalah data yang kita catat.
Mengapa penting? Coba bayangkan: klaim asuransi gagal diproses, tetapi service berjalan normal dan tidak ada error. Tanpa log payload, tanpa correlation ID, kalian tidak punya cara membuktikan request mana yang bermasalah dan di titik mana gagalnya. Observability SOAP adalah disiplin yang menyelamatkan kalian dari investigasi berhari-hari.
SOAP adalah XML lengkap yang bisa dicatat — tapi apa yang dicatat harus disaring. Ada tiga level:
| Data | Alasan |
|---|---|
| Waktu, endpoint, operasi | Rekonstruksi kronologi |
MessageID / wsa:MessageID | Menghubungkan request-response |
| Correlation ID bisnis | Melacak lintas service |
| Fault code + detail | Menangkap kegagalan |
| Ukuran pesan, durasi proses | Analisis performansi |
Apache CXF menyediakan log interceptor bawaan — aktifkan di fase in dan out:
<bean id="loggingInInterceptor"
class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="loggingOutInterceptor"
class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<jaxws:endpoint address="/bank" serviceName="bank">
<jaxws:inInterceptors>
<ref bean="loggingInInterceptor"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="loggingOutInterceptor"/>
</jaxws:outInterceptors>
</jaxws:endpoint>Warning
Logging payload berarti logging data sensitif: nomor rekening, NIK, dokumen medis. Aturan di sektor regulated ketat (GDPR, HIPAA, UU PDP di Indonesia). Praktik aman: mask elemen sensitif sebelum log, atau simpan log payload hanya untuk lingkungan non-produksi dan aktifkan log penuh di produksi hanya sesaat saat debugging.
Strategi umum di produksi:
Di arsitektur yang melibatkan gateway, ESB, dan beberapa service, satu transaksi bisnis melewati banyak sistem. Correlation ID mengikat semua pesan itu dalam satu benang:
Implementasinya sederhana: buat ID unik (UUID atau format TX-<timestamp>-<seq>), bawa di header SOAP (atau header WS-Addressing), dan log ID yang sama di setiap hop:
<soap:Header xmlns:tx="urn:example:tx">
<tx:correlationId>TX-20260816-0001</tx:correlationId>
</soap:Header>Saat ada keluhan "transfer tidak masuk", kalian cari TX-20260816-0001 di log semua service — dan perjalanan transaksi terlihat dalam satu query. Ini wajib untuk produksi.
TCP/IP Monitor di SoapUI menangkap request dan response HTTP mentah — berguna saat client dan server berjalan di mesin yang sama dan kalian ingin melihat apa yang benar-benar dikirim:
Local Port : 9999
Server : localhost
Server Port: 8080Arahkan client ke http://localhost:9999/bank, monitor menampilkan request HTTP mentah yang diteruskan ke 8080 dan response dari server. Ini membuktikan apakah masalah ada di pembuatan pesan client atau di pemrosesan server.
Ketika koneksi HTTPS gagal dengan error TLS yang samar, Java menyediakan debug log TLS lengkap:
java -Djavax.net.debug=ssl:handshake:verbose -jar app.jarOutputnya menampilkan detail handshake: cipher suite yang dinegosiasikan, sertifikat yang dikirim, dan alasan kegagalan (mis. unknown certificate atau certificate expired). Untuk masalah yang lebih umum — truststore yang salah — cek dengan:
keytool -list -keystore $JAVA_HOME/lib/security/cacerts
openssl s_client -connect bank.example.com:443 -showcertsTip
Perintah openssl s_client adalah tool diagnosis TLS paling cepat: ia menampilkan rantai sertifikat, apakah sertifikat dikenali, dan cipher yang dipakai. Sering kali error "SSLHandshakeException" sudah jelas terlihat di sini sebelum kalian menyentuh kode.
Sebagian besar masalah interoperabilitas SOAP (Java ke .NET ke PHP) sebenarnya adalah pelanggaran WS-I Basic Profile — misalnya memakai rpc/encoded atau pola encoding yang tidak distandarkan. Alat verifikasinya:
soap:encoding.Kita bedah WS-I Basic Profile secara penuh di episode 18 — di episode ini, ingat saja: jika dua stack tidak saling bicara dan tidak ada error yang jelas, curigai pelanggaran WS-I.
Urutan langkah saat service SOAP bermasalah:
faultcode menentukan arah investigasi (Sender = cek request; Receiver = cek server).openssl s_client + -Djavax.net.debug.Inti yang harus dibawa pulang:
openssl s_client dan -Djavax.net.debug untuk TLS.Di episode 14 selanjutnya kita akan membahas WS-Security: konsep & token — OASIS SOAP Message Security 1.1, UsernameToken, X.509 Token, timestamp, header Security, dan alasan message-level signing & encryption tak tergantikan oleh TLS. Sampai jumpa di episode 14!