Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule では、エラーとは、何か問題が発生したことを伝達し、意味のある情報を提供することで、ユーザーがスローされたエラーの種類に応じて修正措置を取ることができるようにする方法です。
詳細は、「エラー処理について」を参照してください。
最初のステップは、モジュールによってスローされる可能性があるすべてのエラーを定義することです。これを行うには、ErrorTypeDefinition
インターフェースを実装する enum
を定義します。
この enum
で定義された各値はエラーとみなされます。
public enum SimpleError implements ErrorTypeDefinition<SimpleError> {
INVALID_PARAMETER,
TIME_OUT,
NOT_ALLOWED
}
モジュールエラーは、同じモジュールのエラー (同じ enum
の値) または Mule エラーからのみ継承できます。Mule エラーは、
org.mule.runtime.extension.api.error.MuleErrors
で定義されます。
親エラーを定義していないエラーは、自動的に MULE:ANY
から継承されます。
public enum HierarchalError implements ErrorTypeDefinition<HierarchalError> {
INVALID_PARAMETER,
TIME_OUT,
NOT_ALLOWED,
ILLEGAL_ACTION(NOT_ALLOWED),
BAD_CREDENTIALS(MuleErrors.CONNECTIVITY);
private ErrorTypeDefinition<? extends Enum<?>> parent;
HierarchalError(ErrorTypeDefinition<? extends Enum<?>> parent) {
this.parent = parent;
}
HierarchalError() {
}
@Override
public Optional<ErrorTypeDefinition<? extends Enum<?>>> getParent() {
return Optional.ofNullable(parent);
}
}
モジュールで発生する可能性があるすべてのエラーを宣言したら、それらをスロー する可能性がある操作にエラーをバインドする情報を提供する必要があります。
これを行うには、ErrorTypeProvider
を実装する必要があります。これは、操作によってスロー
される可能性があるエラーを伝達するクラスです。
public class ExecuteErrorsProvider implements ErrorTypeProvider {
@Override
public Set<ErrorTypeDefinition> getErrorTypes() {
HashSet<ErrorTypeDefinition> errors = new HashSet<>();
errors.add(HierarchalErrors.INVALID_PARAMETER);
errors.add(HierarchalErrors.BAD_CREDENTIALS);
errors.add(HierarchalErrors.ILLEGAL_ACTION);
return errors;
}
}
ErrorTypeProvider
を定義したら、それを適切な操作にバインドする
必要があります。次のように、操作レベルで @Throws
アノテーションを使用してバインドします。
@Throws(ExecuteErrorsProvider.class)
public void execute(){
// operation body
}
Studio または Flow Designer で、@Throws
アノテーションが付加された操作は、その操作がスローする可能性があるエラーについてのヒントをユーザーに提供します。
XML は次のようになります。
<flow name="flowName">
<try>
<test-connector:execute/>
<error-handler >
<on-error-continue type="TEST-CONNECTOR:ILLEGAL_ACTION">
<logger level="INFO" message="#[error]"/>
</on-error-continue>
</error-handler>
</try>
</flow>
エラーは、特定のエラーにバインドされている Java 例外の Mule 表現です。
エラーと例外の間に静的なバインドはありません。エラーを伝達
するには、操作が org.mule.runtime.extension.api.exception.ModuleException
または
このクラスの子例外をスローし、コンストラクター内でスローする目的の ErrorTypeDefinition
を示す必要があります。
@Throws(ExecuteErrorsProvider.class)
public void execute(){
try {
throw new IllegalStateException();
} catch (IllegalStateException e){
throw new ModuleException(HierarchalErrors.ILLEGAL_ACTION, e);
}
}
また、このロジックを新しい例外クラス内にラップすることをお勧めします。
public final class IllegalActionException extends ModuleException {
public IllegalActionException(Exception cause) {
super(HierarchalErrors.ILLEGAL_ACTION, cause);
}
}
操作の ErrorTypeProvider で宣言されていないエラーをスローすると、
予期せぬエラーの例外が発生します。操作で宣言されていないエラーをスローすることはできません。
|