fix #2695 use error_code

This commit is contained in:
Shinsuke Sugaya 2022-10-24 21:55:57 +09:00
parent 3eeb8cb839
commit b4b47d6b01

View file

@ -15,11 +15,21 @@
*/
package org.codelibs.fess.mylasta.direction.sponsor;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.UUID;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.fess.Constants;
import org.codelibs.fess.app.web.api.ApiResult;
import org.codelibs.fess.app.web.api.ApiResult.ApiErrorResponse;
import org.codelibs.fess.app.web.api.ApiResult.Status;
import org.codelibs.fess.util.ComponentUtil;
import org.dbflute.optional.OptionalThing;
import org.lastaflute.web.api.ApiFailureHook;
import org.lastaflute.web.api.ApiFailureResource;
@ -32,6 +42,8 @@ import org.lastaflute.web.response.JsonResponse;
*/
public class FessApiFailureHook implements ApiFailureHook { // #change_it for handling API failure
private static final Logger logger = LogManager.getLogger(FessApiFailureHook.class);
// ===================================================================================
// Definition
// ==========
@ -82,10 +94,36 @@ public class FessApiFailureHook implements ApiFailureHook { // #change_it for ha
if (!resource.getMessageList().isEmpty()) {
return resource.getMessageList().stream().collect(Collectors.joining(" "));
}
if (cause != null) {
return cause.getMessage();
}
return "Unknown error";
}
if (cause == null) {
return "Unknown error";
}
final Supplier<String> stacktraceString = () -> {
final StringBuilder sb = new StringBuilder();
if (StringUtil.isBlank(cause.getMessage())) {
sb.append(cause.getClass().getName());
} else {
sb.append(cause.getMessage());
}
try (final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw)) {
cause.printStackTrace(pw);
pw.flush();
sb.append(" [ ").append(sw.toString()).append(" ]");
} catch (final IOException ignore) {}
return sb.toString();
};
if (Constants.TRUE.equalsIgnoreCase(ComponentUtil.getFessConfig().getApiJsonResponseExceptionIncluded())) {
return stacktraceString.get();
}
final String errorCode = UUID.randomUUID().toString();
if (logger.isDebugEnabled()) {
logger.debug("[{}] {}", errorCode, stacktraceString.get().replace("\n", "\\n"));
} else {
logger.warn("[{}] {}", errorCode, cause.getMessage());
}
return "error_code:" + errorCode;
}
}