Symptom:
- Application fails at startup with
IllegalArgumentExceptionrelated tojsonrpc.*.
Cause:
- Fail-fast configuration validation rejects invalid values.
Checks:
jsonrpc.pathstarts with/and has no whitespacejsonrpc.max-batch-size > 0jsonrpc.max-request-bytes > 0jsonrpc.validation.request.params-type-violation-code-policyis set to a valid enum value- allowlist/denylist entries are not blank
jsonrpc.notification-executor-bean-nameis not null
Possible causes:
- Method not registered (annotation scan disabled or bean not detected)
- Method blocked by allowlist/denylist policy
- Method name mismatch between request and registration
Checks:
jsonrpc.scan-annotated-methodsvalue@JsonRpcMethodname or registration namejsonrpc.method-allowlist/jsonrpc.method-denylist
Possible causes:
paramsshape does not match method signature- Missing named argument in object mode
- Positional array size mismatch
- Jackson conversion failure for target type
- Custom
JsonRpcRequestValidatorpolicy maps params-shape errors to-32600
Checks:
- For multi-arg object params, confirm
@JsonRpcParamnames - For reflection names, ensure build uses
-parameters - Validate incoming JSON types
- Confirm
jsonrpc.validation.request.params-type-violation-code-policymatches expected code semantics
This is expected JSON-RPC behavior when id is omitted.
If response is required, include id in request.
Symptom:
- Notifications still appear synchronous.
Checks:
jsonrpc.notification-executor-enabled=true- named executor bean exists if
notification-executor-bean-nameis set - if multiple executors exist, choose one explicitly
Behavior:
- Empty/whitespace-only payload is treated as parse error (
-32700).
Action:
- Ensure clients send valid JSON request object or batch array.
Behavior:
- Request larger than
jsonrpc.max-request-bytesreturns protocol error payload.
Action:
- Increase limit if use case requires larger requests.
- Consider splitting large payload into smaller calls.
Symptom:
./gradlew checkfails with[NullAway]diagnostics.
Cause:
- Production source code violated null-safety contracts enforced at compile time.
Checks:
- Add
@Nullableto parameters/returns/fields that can legitimately be null. - Add explicit null guard and fallback values before passing data into non-null APIs.
- Align overridden method signatures with nullable contracts from super interfaces/classes.
- For JSON-RPC request/response models, keep nullability aligned with protocol semantics.