4.5.6.3. 다른 예외의 원인으로 One Exception을 지정합니다.
예외 번들 메서드에서 반환된 예외는 기본 원인으로 지정된 또 다른 예외를 가질 수 있습니다. 이 작업은 메서드에 매개 변수를 추가하고 @cause를 사용하여 매개 변수에 주석을 달아 수행됩니다. 이 매개변수는 원인 예외를 전달하는 데 사용되며 예외 메시지에서는 참조할 수 없습니다.
다음 절차에서는 원인인 예외를 나타내도록 @ causes 매개변수를 사용하여 예외 번들에서 메서드를 업데이트하는 방법을 보여줍니다. 이 기능을 추가하려는 예외 번들이 이미 생성되었다고 가정합니다.
Throwable또는 하위 클래스 유형의 매개 변수를 메서드에 추가합니다.@Message(id=328, value = "Error calculating: %s.") ArithmeticException calculationError(Throwable cause, String msg);
@ causes 주석을매개 변수에 추가합니다.import org.jboss.logging.annotations.Cause @Message(id=328, value = "Error calculating: %s.") ArithmeticException calculationError(@Cause Throwable cause, String msg);
interface 메서드를 호출하여 예외 오브젝트를 가져옵니다. 가장 일반적인 사용 사례는 캡처된 예외를 원인으로 지정하여
캐치블록에서 새로운 예외를 생성하는 것입니다.try { ... } catch(Exception ex) { throw ExceptionBundle.EXCEPTIONS.calculationError( ex, "calculating payment due per day"); }
다음은 다른 예외의 원인으로 예외를 지정하는 예입니다. 이 예외 번들은 typeth meticException 의 예외를 반환하는 단일 메서드를 정의합니다.
@MessageBundle(projectCode = "TPS")
interface CalcExceptionBundle
{
CalcExceptionBundle EXCEPTIONS = Messages.getBundle(CalcExceptionBundle.class);
@Message(id=328, value = "Error calculating: %s.")
ArithmeticException calcError(@Cause Throwable cause, String value);
}다음 예제에서는 정수를 0으로 분할하려고 하므로 예외가 발생하는 작업을 보여줍니다. 예외가 해결되고 첫 번째 예외를 원인으로 사용하여 새로운 예외가 생성됩니다.
int totalDue = 5;
int daysToPay = 0;
int amountPerDay;
try
{
amountPerDay = totalDue/daysToPay;
}
catch (Exception ex)
{
throw CalcExceptionBundle.EXCEPTIONS.calcError(ex, "payments per day");
}다음은 이전 예제에서 생성된 예외 메시지입니다.
Exception in thread "main" java.lang.ArithmeticException: TPS000328: Error calculating: payments per day.
at com.company.accounts.Main.go(Main.java:58)
at com.company.accounts.Main.main(Main.java:43)
Caused by: java.lang.ArithmeticException: / by zero
at com.company.accounts.Main.go(Main.java:54)
... 1 more