All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.javonet.utils.exceptions.ExceptionSerializer Maven / Gradle / Ivy

Go to download

Javonet allows you to reference and use modules or packages written in (Java/Kotlin/Groovy/Clojure, C#/VB.NET, Ruby, Perl, Python, JavaScript/TypeScript) like they were created in your technology. It works on Linux/Windows and MacOS for applications created in JVM, CLR/Netcore, Perl, Python, Ruby, NodeJS, C++ or GoLang and gives you unparalleled freedom and flexibility with native performance in building your mixed-technologies products. Let it be accessing best AI or cryptography libraries, devices SDKs, legacy client modules, internal custom packages or anything from public repositories available on NPM, Nuget, PyPI, Maven/Gradle, RubyGems or GitHub. Get free from programming languages barriers today! For more information check out our guides at https://www.javonet.com/guides/v2/

There is a newer version: 2.4.5
Show newest version
package com.javonet.utils.exceptions;

import com.javonet.utils.ExceptionType;
import com.javonet.utils.Command;
import com.javonet.utils.CommandType;

import java.util.Arrays;
import java.util.Optional;

public class ExceptionSerializer {
    public static Command serializeException(Throwable exception, Command command) {
        Command exceptionCommand = new Command(command.getRuntimeName(),
                CommandType.EXCEPTION, new Object[]{});
        //TODO: Create Debug mode flag for commands
        boolean isDebug = false;

        StringBuilder stackClasses = new StringBuilder();
        StringBuilder stackMethods = new StringBuilder();
        StringBuilder stackLines = new StringBuilder();
        StringBuilder stackFiles = new StringBuilder();

        StackTraceElement[] stackTraceElements;
        if (isDebug) {
            stackTraceElements = exception.getStackTrace();
        }
        else {
            stackTraceElements = getStackTraceAfterReflection(exception.getStackTrace());
        }
        serializeStackTrace(stackTraceElements, stackClasses, stackMethods, stackLines, stackFiles);


        exceptionCommand = exceptionCommand.addArgToPayload(getExceptionCode(exception));
        exceptionCommand = exceptionCommand.addArgToPayload(command.toString());
        exceptionCommand = exceptionCommand.addArgToPayload(exception.getClass().getName());
        exceptionCommand = exceptionCommand.addArgToPayload(exception.getMessage());
        exceptionCommand = exceptionCommand.addArgToPayload(stackClasses.toString());
        exceptionCommand = exceptionCommand.addArgToPayload(stackMethods.toString());
        exceptionCommand = exceptionCommand.addArgToPayload(stackLines.toString());
        exceptionCommand = exceptionCommand.addArgToPayload(stackFiles.toString());
        return exceptionCommand;
    }

  private static void serializeStackTrace(
      StackTraceElement[] stackTraceElements,
      StringBuilder stackClasses,
      StringBuilder stackMethods,
      StringBuilder stackLines,
      StringBuilder stackFiles) {
    for (StackTraceElement stackTraceElement : stackTraceElements) {
      stackClasses.append(Optional.of(stackTraceElement.getClassName()).orElse("undefined")).append("|");
      stackMethods.append(Optional.of(stackTraceElement.getMethodName()).orElse("undefined")).append("|");
      stackLines.append(Optional.of(stackTraceElement.getLineNumber()).orElse(0)).append("|");
      stackFiles.append(Optional.ofNullable(stackTraceElement.getFileName()).orElse("undefined")).append("|");
    }
  }

    private static StackTraceElement[] getStackTraceAfterReflection(StackTraceElement[] stackTrace) {
    int index = 0;
        for (StackTraceElement element : stackTrace) {
            if (element.getClassName().contains("javonet") || element.getClassName().contains("reflect")) {
                break;
            }
            index++;
        }
        return Arrays.copyOfRange(stackTrace, 0, index);
    }

    private static Object getExceptionCode(Throwable exception){
        switch (exception.getClass().getSimpleName()){
            case "IOException":
                return ExceptionType.IO_EXCEPTION.ordinal();
            case "FileNotFoundException":
                return ExceptionType.FILE_NOT_FOUND_EXCEPTION.ordinal();
            case "RuntimeException":
                return ExceptionType.RUNTIME_EXCEPTION.ordinal();
            case "ArithmeticException":
                return ExceptionType.ARITHMETIC_EXCEPTION.ordinal();
            case "IllegalArgumentException":
                return ExceptionType.ILLEGAL_ARGUMENT_EXCEPTION.ordinal();
            case "IndexOutOfBoundsException":
            case "StringIndexOutOfBoundsException":
            case "ArrayIndexOutOfBoundsException":
                return ExceptionType.INDEX_OUT_OF_BOUNDS_EXCEPTION.ordinal();
            case "NullPointerException":
                return ExceptionType.NULL_POINTER_EXCEPTION.ordinal();
            default:
                return ExceptionType.EXCEPTION.ordinal();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy