]> nmode's Git Repositories - signal-cli/commitdiff
Return json response if available in error data field
authorAsamK <asamk@gmx.de>
Sun, 14 Nov 2021 14:24:21 +0000 (15:24 +0100)
committerAsamK <asamk@gmx.de>
Sun, 14 Nov 2021 14:24:21 +0000 (15:24 +0100)
src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java

index cb87687e66fc49cc9b214a140c10af51ddaf6db5..23c89f26ef810c596a7bf8bbb595b204675b1e1f 100644 (file)
@@ -269,22 +269,35 @@ public class SignalJsonRpcDispatcherHandler {
                     e.getMessage(),
                     null));
         } catch (UserErrorException e) {
                     e.getMessage(),
                     null));
         } catch (UserErrorException e) {
-            throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR, e.getMessage(), null));
+            throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR,
+                    e.getMessage(),
+                    getErrorDataNode(objectMapper, result)));
         } catch (IOErrorException e) {
         } catch (IOErrorException e) {
-            throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR, e.getMessage(), null));
+            throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR,
+                    e.getMessage(),
+                    getErrorDataNode(objectMapper, result)));
         } catch (UntrustedKeyErrorException e) {
         } catch (UntrustedKeyErrorException e) {
-            throw new JsonRpcException(new JsonRpcResponse.Error(UNTRUSTED_KEY_ERROR, e.getMessage(), null));
+            throw new JsonRpcException(new JsonRpcResponse.Error(UNTRUSTED_KEY_ERROR,
+                    e.getMessage(),
+                    getErrorDataNode(objectMapper, result)));
         } catch (Throwable e) {
             logger.error("Command execution failed", e);
             throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
                     e.getMessage(),
         } catch (Throwable e) {
             logger.error("Command execution failed", e);
             throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
                     e.getMessage(),
-                    null));
+                    getErrorDataNode(objectMapper, result)));
         }
 
         Object output = result[0] == null ? Map.of() : result[0];
         return objectMapper.valueToTree(output);
     }
 
         }
 
         Object output = result[0] == null ? Map.of() : result[0];
         return objectMapper.valueToTree(output);
     }
 
+    private JsonNode getErrorDataNode(final ObjectMapper objectMapper, final Object[] result) {
+        if (result[0] == null) {
+            return null;
+        }
+        return objectMapper.valueToTree(Map.of("response", result[0]));
+    }
+
     private <T> void parseParamsAndRunCommand(
             final ObjectMapper objectMapper,
             final TreeNode params,
     private <T> void parseParamsAndRunCommand(
             final ObjectMapper objectMapper,
             final TreeNode params,