FINERACT-1926: External owner accounting - fix (error handling)
This commit is contained in:
@@ -21,6 +21,7 @@ package org.apache.fineract.batch.exception;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import jakarta.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
import jakarta.ws.rs.ext.ExceptionMapper;
|
import jakarta.ws.rs.ext.ExceptionMapper;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@@ -53,7 +54,8 @@ public final class ErrorHandler {
|
|||||||
|
|
||||||
private static final Gson JSON_HELPER = GoogleGsonSerializerHelper.createGsonBuilder(true).create();
|
private static final Gson JSON_HELPER = GoogleGsonSerializerHelper.createGsonBuilder(true).create();
|
||||||
|
|
||||||
private static final LinkedHashMap<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> EXCEPTION_HANDLERS = new LinkedHashMap<>();
|
private static final Map<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> EXCEPTION_HANDLERS = Collections
|
||||||
|
.synchronizedMap(new LinkedHashMap<>());
|
||||||
private static final Map.Entry<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> DEFAULT_ERROR_HANDLER = Map.entry(
|
private static final Map.Entry<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> DEFAULT_ERROR_HANDLER = Map.entry(
|
||||||
RuntimeException.class,
|
RuntimeException.class,
|
||||||
runtimeException -> new ErrorInfo(500, 9999, "{\"Exception\": %s}".formatted(runtimeException.getMessage())));
|
runtimeException -> new ErrorInfo(500, 9999, "{\"Exception\": %s}".formatted(runtimeException.getMessage())));
|
||||||
@@ -85,6 +87,8 @@ public final class ErrorHandler {
|
|||||||
LinkedHashMap<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> newHandlers = new LinkedHashMap<>();
|
LinkedHashMap<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> newHandlers = new LinkedHashMap<>();
|
||||||
newHandlers.put(exceptionClass, runtimeException -> handleException(runtimeException, mapper, errorCode));
|
newHandlers.put(exceptionClass, runtimeException -> handleException(runtimeException, mapper, errorCode));
|
||||||
EXCEPTION_HANDLERS.forEach(newHandlers::putIfAbsent);
|
EXCEPTION_HANDLERS.forEach(newHandlers::putIfAbsent);
|
||||||
|
EXCEPTION_HANDLERS.clear();
|
||||||
|
newHandlers.forEach(EXCEPTION_HANDLERS::putIfAbsent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerNewErrorHandler(final Class<? extends RuntimeException> exceptionClass,
|
public static void registerNewErrorHandler(final Class<? extends RuntimeException> exceptionClass,
|
||||||
@@ -92,6 +96,8 @@ public final class ErrorHandler {
|
|||||||
LinkedHashMap<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> newHandlers = new LinkedHashMap<>();
|
LinkedHashMap<Class<? extends Exception>, Function<RuntimeException, ErrorInfo>> newHandlers = new LinkedHashMap<>();
|
||||||
newHandlers.put(exceptionClass, function);
|
newHandlers.put(exceptionClass, function);
|
||||||
EXCEPTION_HANDLERS.forEach(newHandlers::putIfAbsent);
|
EXCEPTION_HANDLERS.forEach(newHandlers::putIfAbsent);
|
||||||
|
EXCEPTION_HANDLERS.clear();
|
||||||
|
newHandlers.forEach(EXCEPTION_HANDLERS::putIfAbsent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ErrorInfo handleException(final RuntimeException exception, final ExceptionMapper mapper, final int errorCode) {
|
private static ErrorInfo handleException(final RuntimeException exception, final ExceptionMapper mapper, final int errorCode) {
|
||||||
|
|||||||
+2
-2
@@ -20,7 +20,7 @@ package org.apache.fineract.investor.domain;
|
|||||||
|
|
||||||
import org.apache.fineract.infrastructure.core.domain.ExternalId;
|
import org.apache.fineract.infrastructure.core.domain.ExternalId;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
@@ -31,5 +31,5 @@ public interface ExternalAssetOwnerJournalEntryMappingRepository extends JpaRepo
|
|||||||
|
|
||||||
@Query("SELECT mapping FROM ExternalAssetOwnerJournalEntryMapping mapping WHERE mapping.owner.externalId = :ownerExternalId")
|
@Query("SELECT mapping FROM ExternalAssetOwnerJournalEntryMapping mapping WHERE mapping.owner.externalId = :ownerExternalId")
|
||||||
Page<ExternalAssetOwnerJournalEntryMapping> findByExternalOwnerId(@Param("ownerExternalId") ExternalId ownerExternalId,
|
Page<ExternalAssetOwnerJournalEntryMapping> findByExternalOwnerId(@Param("ownerExternalId") ExternalId ownerExternalId,
|
||||||
PageRequest pageRequest);
|
Pageable pageRequest);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -19,7 +19,7 @@
|
|||||||
package org.apache.fineract.investor.domain;
|
package org.apache.fineract.investor.domain;
|
||||||
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
@@ -30,5 +30,5 @@ public interface ExternalAssetOwnerTransferJournalEntryMappingRepository
|
|||||||
JpaSpecificationExecutor<ExternalAssetOwnerTransferJournalEntryMapping> {
|
JpaSpecificationExecutor<ExternalAssetOwnerTransferJournalEntryMapping> {
|
||||||
|
|
||||||
@Query("SELECT mapping FROM ExternalAssetOwnerTransferJournalEntryMapping mapping WHERE mapping.ownerTransfer.id =:transferId")
|
@Query("SELECT mapping FROM ExternalAssetOwnerTransferJournalEntryMapping mapping WHERE mapping.ownerTransfer.id =:transferId")
|
||||||
Page<ExternalAssetOwnerTransferJournalEntryMapping> findByTransferId(@Param("transferId") Long transferId, PageRequest pageable);
|
Page<ExternalAssetOwnerTransferJournalEntryMapping> findByTransferId(@Param("transferId") Long transferId, Pageable pageable);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -27,7 +27,9 @@ import org.apache.fineract.infrastructure.jobs.exception.LoanIdsHardLockedExcept
|
|||||||
import org.apache.fineract.portfolio.loanaccount.exception.MultiDisbursementDataRequiredException;
|
import org.apache.fineract.portfolio.loanaccount.exception.MultiDisbursementDataRequiredException;
|
||||||
import org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequiredException;
|
import org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequiredException;
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
public class ErrorHandlerRegister {
|
public class ErrorHandlerRegister {
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
|
|||||||
Reference in New Issue
Block a user