/**
* Serialize a {@link Throwable} as a {@link ThrowableDto}.
*/
private static ThrowableDtoImpl getThrowableAsDto(Throwable e) {
ThrowableDtoImpl ret = ThrowableDtoImpl.make();
ThrowableDtoImpl currentDto = ret;
Throwable currentCause = e;
for (int causeCounter = 0; causeCounter < ExceptionUtils.MAX_CAUSE && currentCause != null;
causeCounter++) {
currentDto.setClassName(currentCause.getClass().getName());
currentDto.setMessage(currentCause.getMessage());
JsoArray<StackTraceElementDto> currentStackTrace = JsoArray.create();
StackTraceElement[] stackElems = currentCause.getStackTrace();
if (stackElems != null) {
for (int i = 0; i < stackElems.length; ++i) {
StackTraceElement stackElem = stackElems[i];
currentStackTrace.add(StackTraceElementDtoImpl
.make()
.setClassName(stackElem.getClassName())
.setFileName(stackElem.getFileName())
.setMethodName(stackElem.getMethodName())
.setLineNumber(stackElem.getLineNumber()));
}
currentDto.setStackTrace(currentStackTrace);
}
currentCause = currentCause.getCause();
if (currentCause != null) {
ThrowableDtoImpl nextDto = ThrowableDtoImpl.make();
currentDto.setCause(nextDto);
currentDto = nextDto;
}
}