この記事の目次
SalesforceでInvocation TargetExceptionエラーの対処法とは?
SalesforceのInvocation TargetExceptionの位置づけ
SalesforceにおいてInvocation TargetExceptionが用いられるケースとしては、組織上でjavaクラスの定義をする局面や、開発者コンソールで各クラスの親クラスや子クラスを定義する場合に、何かしらの問題が発生した場合などにエラーが発生する場合などが挙げられます。 SalesforceではApexが利用されますが、Invocation TargetExceptionはJavaにおけるメソッドの一部で利用されていますので、基本的にApex上ではInvocation TargetExceptionのエラーを見かけることはないでしょう。 したがって次の章ではSalesforceを組織上で運用する場合でのJavaのInvocation TargetExceptionメソッドについて基本的な詳細を解説していきます。Invocation TargetExceptionについて復習
Invocation TargetExceptionとはJavaのリフレクションAPIのクラスで呼び出されたメソッドに対して、スローされた場合に例外が発生することがあります。その例外をラップする事でチェックの対象外とみなす挙動を示しています。 このターゲット例外はコンストラクタにおいても同様に適応されます。 以下の例ではInvocation TargetExceptionがメッセージを定義しています。
... } catch (InvocationTargetException e) {
log.error("error001 : error Message");
}
Invocation TargetExceptionの挙動について
前章に記載した例ではInvocation TargetExceptionでの挙動の理解を深めるために、定義したメッセージをログに出力しています。 しかしあくまで、Invocation TargetExceptionで出力されるエラーは、例外処理が出力されるだけで、メッセージだけの出力では原因が紐とけない場合がありますので注意しましょう。 そのため、Invocation TargetExceptionのメッセージを設定する場合は、単に文字列として出力されることを踏まえて、想定されている原因へ紐づけされる意味を設定するようにしましょう。リフレクションAPIとは?
リフレクションAPIとはjava.lang.reflectというパッケージ内に存在するAPIのことを示しています。 リフレクションAPIを利用することで、コード内のフィールドや、メソッド、コンストラクタの情報を、前もって定義されたセキュリティー上で操作、実行することが可能になります。 リフレクションAPIを利用する身近なケースとしては、Salesforceの開発を自身のIDEやエディターを利用している場合です。 たとえばコードの補完機能を利用すると同時にString文字はString文字として認識して、IDE内で識別したメタデータを介して適切な補完をするために利用されます。SalesforceのnvocationTargetExceptionエラーの切り分け方法
Salesforceのシステムが正常に起動しない場合に、java.lang.reflect.InvocationTargetExceptionと言うエラーメッセージが出力されることがあります。 これもInvocationTargetExceptionと記述されていますが、あくまでリフレクションAPIがメソッドを呼び出して、そのメソッド側で例外が発生している状況を示しています。したがってメソッド側の例外からエラーメッセージの発生した原因を調べる必要があります。getCauseメソッドを利用して原因を切り分ける方法
メソッド側の例外を確認するためにはgetCauseメソッドを利用してください。
省略
} catch (InvocationTargetException e) {
assertThat(e.getCause(), is(instanceOf(IllegalArgumentException.class)));
assertEquals("error message",
e.getCause().getMessage());
}
上記の記述ではgetCauseメソッドを利用してInvocationTargetExceptionの原因を取得して表示しています。
ただし必ずしもInvocationTargetExceptionエラーが発生した場合はgetCauseメソッドで原因が見つかるわけでなく、メッセージのnullを返す場合もありますので、その場合は発生した状況に合わせて別の手段を講じましょう。
InvocationTargetExceptionに関係するメソッド
getCause()
InvocationTargetExceptionのエラーが発生した場合に例外の原因を呼び出します。
getTargetException()
InvocationTargetExceptionリフレクションのクラスでコンストラクタもしくはメソッドがスローされた例外を取得するためのメソッドです。
発生したエラーの内容に応じて対応できるように、各メソッドの挙動について把握しておきましょう。
より詳細な説明は以下のjavadocご参考にしてください。