Skip to content

Commit b9b3d0d

Browse files
committed
jsonrpc: code cleanup
1 parent 60e2a4c commit b9b3d0d

4 files changed

Lines changed: 25 additions & 75 deletions

File tree

modules/jooby-jsonrpc/src/main/java/io/jooby/internal/jsonrpc/JsonRpcExceptionTranslator.java

Lines changed: 0 additions & 51 deletions
This file was deleted.

modules/jooby-jsonrpc/src/main/java/io/jooby/internal/jsonrpc/JsonRpcExecutor.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.slf4j.Logger;
1313

1414
import io.jooby.Context;
15+
import io.jooby.Reified;
1516
import io.jooby.SneakyThrows;
1617
import io.jooby.jsonrpc.*;
1718

@@ -32,26 +33,19 @@
3233
public class JsonRpcExecutor implements JsonRpcChain {
3334
private final Map<String, JsonRpcService> services;
3435
private final Map<Class<?>, Logger> loggers;
35-
private final JsonRpcExceptionTranslator exceptionTranslator;
3636
private final Exception parseError;
3737

3838
/**
3939
* Constructs a new executor for a single JSON-RPC request.
4040
*
41-
* @param loggers A map of loggers keyed by service class.
4241
* @param services A map of registered JSON-RPC services keyed by method name.
43-
* @param exceptionTranslator The translator used to map standard Throwables to JSON-RPC error
44-
* codes.
42+
* @param loggers A map of service loggers keyed by service class.
4543
* @param parseError Any exception that occurred during the initial JSON parsing phase.
4644
*/
4745
public JsonRpcExecutor(
48-
Map<Class<?>, Logger> loggers,
49-
Map<String, JsonRpcService> services,
50-
JsonRpcExceptionTranslator exceptionTranslator,
51-
Exception parseError) {
46+
Map<String, JsonRpcService> services, Map<Class<?>, Logger> loggers, Exception parseError) {
5247
this.services = services;
5348
this.loggers = loggers;
54-
this.exceptionTranslator = exceptionTranslator;
5549
this.parseError = parseError;
5650
}
5751

@@ -93,13 +87,13 @@ public JsonRpcExecutor(
9387
throw new JsonRpcException(
9488
JsonRpcErrorCode.METHOD_NOT_FOUND, "Method not found: " + fullMethod);
9589
} catch (Throwable cause) {
96-
return toRpcResponse(log, request, cause);
90+
return toRpcResponse(ctx, log, request, cause);
9791
}
9892
}
9993

10094
private Optional<JsonRpcResponse> toRpcResponse(
101-
Logger log, JsonRpcRequest request, Throwable ex) {
102-
var code = exceptionTranslator.toErrorCode(ex);
95+
Context ctx, Logger log, JsonRpcRequest request, Throwable ex) {
96+
var code = toErrorCode(ctx, ex);
10397
log(log, request, code, ex);
10498

10599
if (SneakyThrows.isFatal(ex)) {
@@ -172,4 +166,18 @@ private void log(Logger log, JsonRpcRequest request, JsonRpcErrorCode code, Thro
172166
}
173167
}
174168
}
169+
170+
public JsonRpcErrorCode toErrorCode(Context ctx, Throwable cause) {
171+
if (cause instanceof JsonRpcException rpcException) {
172+
return rpcException.getCode();
173+
}
174+
// Attempt to look up any user-defined exception mappings from the registry
175+
Map<Class<?>, JsonRpcErrorCode> customErrorMapping =
176+
ctx.require(Reified.map(Class.class, JsonRpcErrorCode.class));
177+
return customErrorMapping.entrySet().stream()
178+
.filter(entry -> entry.getKey().isInstance(cause))
179+
.findFirst()
180+
.map(Map.Entry::getValue)
181+
.orElseGet(() -> JsonRpcErrorCode.of(ctx.getRouter().errorCode(cause)));
182+
}
175183
}

modules/jooby-jsonrpc/src/main/java/io/jooby/internal/jsonrpc/JsonRpcHandler.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,11 @@
2424

2525
public class JsonRpcHandler implements Route.Handler {
2626
private final Map<String, JsonRpcService> services;
27-
private final JsonRpcExceptionTranslator exceptionTranslator;
28-
private final HashMap<Class<?>, Logger> loggers;
2927
private final JsonRpcInvoker invoker;
28+
private final Map<Class<?>, Logger> loggers = new HashMap<>();
3029

31-
public JsonRpcHandler(
32-
Map<String, JsonRpcService> services,
33-
JsonRpcExceptionTranslator exceptionTranslator,
34-
JsonRpcInvoker invoker) {
30+
public JsonRpcHandler(Map<String, JsonRpcService> services, JsonRpcInvoker invoker) {
3531
this.services = services;
36-
this.exceptionTranslator = exceptionTranslator;
37-
this.invoker = invoker;
38-
this.loggers = new HashMap<>();
3932
loggers.put(JsonRpcService.class, LoggerFactory.getLogger(JsonRpcService.class));
4033
services
4134
.values()
@@ -44,6 +37,7 @@ public JsonRpcHandler(
4437
var generated = service.getClass().getAnnotation(Generated.class);
4538
loggers.put(service.getClass(), LoggerFactory.getLogger(generated.value()));
4639
});
40+
this.invoker = invoker;
4741
}
4842

4943
/**
@@ -70,7 +64,7 @@ public JsonRpcHandler(
7064
}
7165

7266
var responses = new ArrayList<JsonRpcResponse>();
73-
var executor = new JsonRpcExecutor(loggers, services, exceptionTranslator, parseError);
67+
var executor = new JsonRpcExecutor(services, loggers, parseError);
7468

7569
// Look up all generated *Rpc classes registered in the service registry
7670
for (var request : input) {

modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import io.jooby.*;
1313
import io.jooby.exception.MissingValueException;
1414
import io.jooby.exception.TypeMismatchException;
15-
import io.jooby.internal.jsonrpc.JsonRpcExceptionTranslator;
1615
import io.jooby.internal.jsonrpc.JsonRpcHandler;
1716
import io.jooby.jsonrpc.instrumentation.OtelJsonRcpTracing;
1817

@@ -130,7 +129,7 @@ public void install(Jooby app) throws Exception {
130129
if (head != null) {
131130
invoker = invoker == null ? head : head.then(invoker);
132131
}
133-
app.post(path, new JsonRpcHandler(services, new JsonRpcExceptionTranslator(app), invoker));
132+
app.post(path, new JsonRpcHandler(services, invoker));
134133

135134
// Initialize the custom exception mapping registry
136135
app.getServices()

0 commit comments

Comments
 (0)