CosmosExceptionUtils.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.data.cosmos.exception;
import com.azure.cosmos.CosmosException;
import org.springframework.util.StringUtils;
import reactor.core.Exceptions;
import reactor.core.publisher.Mono;
/**
* To handle and throw a cosmos db exception when access the database
*/
public class CosmosExceptionUtils {
/**
* To throw a CosmosDBAccessException
*
* @param message the detail message
* @param throwable exception
* @param <T> type class of Mono
* @return Mono instance
* @throws CosmosAccessException for operations on cosmos db
*/
public static <T> Mono<T> exceptionHandler(String message, Throwable throwable) {
if (StringUtils.isEmpty(message)) {
message = "Failed to access cosmos db database";
}
// Unwrap the exception in case if it is a reactive exception
final Throwable unwrappedThrowable = Exceptions.unwrap(throwable);
throw new CosmosAccessException(message, unwrappedThrowable);
}
/**
* To find an exceptionHandler for a exception and return empty Mono if the exception status code is not found
*
* @param message the detail message
* @param throwable exception
* @param <T> type class of Mono
* @return Mono instance
*/
public static <T> Mono<T> findAPIExceptionHandler(String message, Throwable throwable) {
// Unwrap the exception in case if it is a reactive exception
final Throwable unwrappedThrowable = Exceptions.unwrap(throwable);
if (unwrappedThrowable instanceof CosmosException) {
final CosmosException cosmosClientException = (CosmosException) unwrappedThrowable;
if (cosmosClientException.getStatusCode() == 404) {
return Mono.empty();
}
}
return exceptionHandler(message, unwrappedThrowable);
}
}