最近はやり?のサーバロジックを呼び出す際に、サーバ側で発生したエラー情報をクライアント(Flex)で受け取る方法が書かれたエントリーを集めてみました。
RemoteObjectやWebServiceなど呼び出し方法やサーバ実装によって取得方法が異なるようです。
WebServiceなんかは、ServerStatusCodeが200番でないと、エラー情報が取得できないらしく、みなさんServletのfilterやASP.NETのGlobal.asxなどで変更して対応しているようです。
WebServiceについてはBlazeDSのproxyを使った場合で変わったりするのでしょうか?ちょっと気になるところです。
RemoteObjectを使った例ではWebOrb(.NET)やColdFusion、Javaなどの例がありました。
エラー発生時にはFaultEventが送出されるので、そのFaultEventからFaultを取得しそこから例外情報を取得します。
こんな風にタグを書いて..
<mx:RemoteObject id="srv" destination="hogeServic" showBusyCursor="true" result="event.token.resultHandler(event)" fault="event.token.faultHandler(event)"/>
こんな風にFaultを取得します。
public function faultHandler(event:FaultEvent):void{
var fault:Fault = event.fault as Fault;
}
Faultから、例外やエラー情報を取得します。
#Javaの例外内容を取得する方法はこちら。
Sending extra data in Java Exceptions to Flex Clients
http://blogs.eyepartner.com/adrian/flex/sending-extra-data-in-java-exceptions-to-flex-clients/
#サーバがBlazeDSの例
Handling Java Exceptions in Flex application « Sujit Reddy G - The Evangelist
http://sujitreddyg.wordpress.com/2008/02/12/handling-java-exceptions-in-flex-application/
#FxUGのフォーラムにあった、FaultからrootCause経由で取得する方法。これがきっかけでS2Flex2とComponentsのバージョンアップにつながりました。
Java側で発生した例外の内容を取得する方法
http://www.fxug.net/modules/xhnewbb/viewtopic.php?viewmode=flat&topic_id=1752&forum=15
#sato-shiさんも過去に紹介していましたっ
Javaの例外を取る - Flex Coder
http://d.hatena.ne.jp/sato-shi/20080224/p18
#WebService経由だと例外が発生してstatusCodeが500になってしまいます。Flex側ではStatusCodeが200でないと受け取れません。Servletフィルタを使って無理やり500->200にしています。強引だ..。
Stack Overflow Handling Web Service exception in Flex code
http://stackoverflowexception.blogspot.com/2007/02/handing-web-service-exception-in-flex.html
#FxUGのフォーラムの投稿 ASP.NETでの対応コードがあります。やっぱりstatusCodeを200番に変更して対応してるようです。
WebServiceからのSOAP Faultを正しく受け取りたい
http://www.fxug.net/modules/xhnewbb/viewtopic.php?viewmode=flat&topic_id=554&forum=1
#サーバがColdFusionのケースはこちらのエントリーを参考に。
Bruce Phillips' Blog Handling ColdFusion Custom Exceptions In Flex
http://www.brucephillips.name/blog/index.cfm/2008/4/27/Handling-ColdFusion-Custom-Exceptions-In-Flex
Flex2 + NET(WebOrb)については、devnetに記事がありました。
Adobe - Developer Center Handling .NET exceptions in Flex
http://www.adobe.com/devnet/flex/articles/net_exceptions.html
#AS2の例
Exceptions and Exception Handling - ActionScript.org Flash, Flex and
ActionScript Resources
http://www.actionscript.org/resources/articles/603/15/Exceptions-and-Exception-Handling/Page15.html
この記事に対するコメント