# 레코드 정규 생성자가 막는 조건 if (maxTotalConnections < 1 || maxConnectionsPerRoute < 1 || maxPendingAcquires < 0) { throw new IllegalArgumentException("pool limits must be positive"); } if (maxConnectionsPerRoute > maxTotalConnections) { throw new IllegalArgumentException("per-route pool must not exceed the total pool"); } # 검증기가 같은 조건을 다시 본다 if (profile.pool().maxConnectionsPerRoute() > profile.pool().maxTotalConnections()) { // A per-route ceiling above the total is incoherent, and on Reactor — where the per-route // knob is the only one that exists — it silently becomes the effective limit. out.add(violation("POOL_ROUTE_EXCEEDS_TOTAL", profile, "pool.max-connections-per-route")); } # 검증기가 약속하는 보고 형태 /** * Fail-closed startup validation for a Named Client Profile (design §11.2, §30.1). * *

Every guard in the design has exactly one stable violation code here. The result is sorted so * a configuration error reports deterministically across runs and machines. */ # 검증기가 내는 코드 수 violation( 호출 40개, 서로 다른 코드 35개 한 줄 grep 이 보는 코드 34개, 놓치는 것 ['PROXY_AMBIENT_NO_PROXY_UNSUPPORTED'] } if (profile.proxy().importAmbientNoProxy()) { out.add( violation( "PROXY_AMBIENT_NO_PROXY_UNSUPPORTED", profile, "proxy.import-ambient-no-proxy")); } # PoolSettings 를 만드는 곳 (src/main 전체) bootstrap/autoconfigure/httpclient/HttpClientProfileFactory.java:83: return new PoolSettings( # 같은 목록의 다른 코드 하나 profiles.forEach( (name, profile) -> { if (!seenNames.add(name.value())) { violations.add("DUPLICATE_CLIENT_NAME profile=" + name.value()); } } if (seen.contains(name)) { throw new IllegalStateException(where + " declares '" + name + "' more than once"); } # 두 코드를 이름으로 참조하는 곳 (저장소 전체, 확장자 제한 없음) bootstrap/autoconfigure/httpclient/HttpClientStartupValidator.java:70: violations.add("DUPLICATE_CLIENT_NAME profile=" + name.value()); adapter/outbound/httpclient/profile/ClientProfileValidator.java:195: out.add(violation("POOL_ROUTE_EXCEEDS_TOTAL", profile, "pool.max-connections-per-route")); docs/httpclient/configuration-reference.md:191:`RETRY_BACKOFF_REQUIRED`, `MISSING_PRODUCTION_SETTING`, `DUPLICATE_CLIENT_NAME`, docs/httpclient/configuration-reference.md:194:`HTTP2_REQUIRED_TRANSPORT_UNSUPPORTED`, `POOL_ROUTE_EXCEEDS_TOTAL`, docs/httpclient/configuration-reference.md:209:- `POOL_ROUTE_EXCEEDS_TOTAL` — a per-route ceiling above the total is incoherent, and on Reactor,