例外をクライアントに返す場合の注意

2005-01-08Re:Flash Remoing FaultクラスとJava例外クラス

faultcode
発生したExceptionにgetCodeメソッドがある場合その値、無ければ"SERVER.PROCESSING"という文字列。
faultstring, description
発生したExceptionにgetDescriptionメソッドがあればその値、無ければgetMessageメソッドの値。
detail
発生したExceptionのスタックトレース
type
exception.getClass().getName()

この話題ではまったので備忘のために書いておく。
まず、上記はthrowした例外に対して行われるわけではない。throwした例外eにgetCause()したものを対象に行われる。ただし、getCause()した結果がnullの場合は、eを指す仕様。これは、S2OpenAMFの中で行っている。

したがって、ユーザーの作った例外から、上記属性をFlash Clientに返したい場合、getCause()にnullを設定しなければならない。一方で、getCause()相当の情報、または獲た情報を基に(ExceptionIntercepterなどを作り)ログに出力したい場合などには、前記の制約からgetCause()で取得できないように別プロパティを作ってそっちに保持させる。

影響

上記の対応をしていないとTraceIntercepterを使って出てきた例外のメッセージを、クライアントで拾えないという状況になり、はまる。