Java · Ödeme risk incelemesi
Java JDK HTTP servisinde işlem bağlamı, adımlar ve risk değerlendirmesi.
#1. Maven bağımlılığını kurun
Portal teslimindeki yerel Maven deposunu kurumun çözümleme sürecine ekleyin. Çekirdek SDK Java 8+ destekler. Demo Java 11 ile derlenir; Servlet veya Spring gerektirmez.
<dependency>
<groupId>io.sigillum</groupId>
<artifactId>finans-sdk</artifactId>
<version>0.11.0</version>
</dependency>package example;
import io.sigillum.finans.*;
import com.sun.net.httpserver.HttpServer;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.InetSocketAddress;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
public final class PaymentDemo {
public static void main(String[] args) throws Exception {
String path = System.getenv("SIGILLUM_CONFIG");
if (path == null) throw new IllegalArgumentException("SIGILLUM_CONFIG must be set");
Sigillum sdk = Sigillum.start(Paths.get(path).toAbsolutePath());
ObjectMapper json = new ObjectMapper();
HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1", 5109), 0);
server.createContext("/payments/assess", sdk.httpHandler(exchange -> {
if (!"POST".equals(exchange.getRequestMethod())) {
exchange.sendResponseHeaders(405, -1); exchange.close(); return;
}
byte[] raw = exchange.getRequestBody().readNBytes(8193);
if (raw.length > 8192) { exchange.sendResponseHeaders(413, -1); exchange.close(); return; }
var input = json.readTree(raw);
try (ObservationScope step = sdk.child("payment-rule");
Sigillum.Binding current = step.activate()) {
double amount = input.path("amount").asDouble(-1);
if (amount <= 0) { exchange.sendResponseHeaders(400, -1); exchange.close(); return; }
// Sentetik eşik kuralı: gerçek risk modeli veya finans tavsiyesi değildir.
Map<String,Object> result = new LinkedHashMap<>();
result.put("requestRef", input.path("requestRef").asText("DEMO-PAYMENT"));
result.put("amount", amount);
result.put("reviewRequired", amount > 10000);
result.put("demonstration", true);
sdk.ai("policy", "{\"name\":\"demo-amount-threshold\",\"threshold\":10000}".getBytes(StandardCharsets.UTF_8));
sdk.ai("explanation", "{\"method\":\"deterministic-demo\",\"rule\":\"amount > 10000\"}".getBytes(StandardCharsets.UTF_8));
byte[] response = json.writeValueAsBytes(result);
sdk.capture("custom", "payment.result", response);
sdk.capture(sdk.current(), "source", "comparison.source", "demo.payment/1",
"{\"type\":\"demo-result\"}".getBytes(StandardCharsets.UTF_8),
new CaptureContent("result", "application/json", "comparison.originalContent", response));
exchange.getResponseHeaders().set("Content-Type", "application/json");
exchange.sendResponseHeaders(200, response.length);
exchange.getResponseBody().write(response);
} finally { exchange.close(); }
}));
server.createContext("/sdk-status", exchange -> {
byte[] response = sdk.diagnostics().toString().getBytes(StandardCharsets.UTF_8);
exchange.sendResponseHeaders(200, response.length);
exchange.getResponseBody().write(response); exchange.close();
});
server.start();
System.out.println("Demo: http://127.0.0.1:5109 — SDK diagnostics: /sdk-status");
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>example.sigillum</groupId><artifactId>payment-demo</artifactId><version>1.0.0</version>
<properties><maven.compiler.release>11</maven.compiler.release><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
<dependencies><dependency><groupId>io.sigillum</groupId><artifactId>finans-sdk</artifactId><version>0.11.0</version></dependency></dependencies>
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>3.5.0</version><configuration><mainClass>example.PaymentDemo</mainClass></configuration></plugin></plugins></build>
</project>#2. Servis ayarı ve HTTP sınırı
Sigillum.start(absolutePath) ile servis başına bir SDK oluşturun. JDK HttpServer handler’ını sigillum.httpHandler(nativeHandler) ile sarın. Outbound Java 8 bağlantıları için httpConnection, Java 11+ için httpClient kullanılır. Desteklenmeyen üçüncü taraf HTTP istemcisi otomatik gözlenmiş sayılmaz.
#3. Ödeme riskini gözleyin
Demo POST /payments/assess girişinde ödeme tutarı ve istek referansını alır. Gerçek yerel değerlendirme bir alt scope içinde yapılır. Politika, açıklama, iş sonucu ve kaynak eki açık ai çağrılarıyla kaydedilir. Ödeme gerçekleştirilmez.
#4. Ek bilgi ve kaynak dosyası
sigillum.ai("model", modelJson) gibi metotlar hazır AI ailelerini kullanır. capture(context, family, kind, schema, rawJson, contents...) ortak genişletme yüzeyidir. CaptureContent(id, mediaType, purpose, bytes) özgün içerik içindir. SpanLink yalnız gerçek trace/span bağlarına işaret etmelidir.
#5. Thread ve callback bağlamı
wrap(Runnable) / wrap(Callable) gerçek executor sınırında Sigillum bağlamını taşır. activate(context) önceki bağlamı scope sonunda geri getirir. Aynı kişi referansına bakıp bağımsız işleri tek işlemde birleştirmeyin. SDK uygulamanın global OTEL provider’ını değiştirmez.
#6. Örneği çalıştırın
ZIP içindeki README’ye göre teslim edilmiş Maven paketlerini kurun, SIGILLUM_CONFIG ile mutlak ayar yolunu verin ve uygulamayı çalıştırın. Servlet projeleri için Servlet adaptörleri sayfasını kullanın.
