[akabana-user:197] Re: S2Flex2のサーバで返却するfaultDetailについて

jun funakura [E-MAIL ADDRESS DELETED]
2008年 10月 25日 (土) 16:22:37 JST


太田さん

はじめまして、ふなくら(nod)です。
S2Flex2をお使いいただいてありがとうございます。

causeの内容ですが、現在リリースしている最新では
FaultにrootCauseを追加して、例外の情報を取得できるようにしています。

経緯はこちら。
http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=1752

で、rootCauseに詳細を入れて取得できるようになったものの、今度は
以下の問題が発生してしまっています。

http://ml.seasar.org/archives/akabana-user/2008-May/000175.html

rootCauseに含まれる例外によっては、FlashPlayer側で取得できない
(Decodeできない)ようになっているようです。
プロパティの型、サイズ、数または
例外の大元になる原因の深さによるのかもしれません。

ですので現在、例外発生時に返す情報を再考している状態です。
faultDetailに例外の大元となる情報を追加することで、FlashPlayer側で
さらにエラーを取得できないケースが増えてしまうかもしれません。

現在のverでは、faultのrootCauseから情報を取得できると思いますので
(例外によっては上記の問題が発生してしまいますが..)
その情報があればサーバ開発担当者に例外情報を伝えられるのではないでしょうか。

ご検討ください。

BlazeDSではFaultDetailに
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PrintWriter pr = new PrintWriter(outputStream);
            pr.println();
            e.printStackTrace(pr);
            pr.flush();
            trace = outputStream.toString();

といった形で設定しているらしきコードもあったので、
提案いただいた形を追加しても問題ないのかもしれません。
rootCauseの問題ととも確認/検討したいと思います。
今しばらく検証と修正するお時間をいただければと思います。

以上とりいそぎご回答まで。

--
ふなくら


2008/10/23 0:49 Takahiro Ota <[E-MAIL ADDRESS DELETED]>:
> はじめまして。太田と申します。
> Flexを利用したプロジェクトでありがたくS2Flex2を使わせていただいております。
> # 環境 サーバ:S2(2.4.24)+S2Flex2(1.1.1-rc1) クライアント:Flex & Flash (flash.net.NetConnection)
>
> 現在私が開発しているプロジェクトで、RemotingServiceがthrowした例外の情報を
> Flex側で受け取り、分岐処理を行っているのですが、
> その際、バグか否かを判別するため、Flex側の開発担当からエラーの情報として、
> faultDetailの内容をサーバ側の開発担当に渡し、解析を行う。といったことを行っております。
>
> その際、faultDetailにはcauseの情報が含まれておらず、結局サーバ側でスタックトレースを含む
> 詳細なログを出力し探し出すという手間を取っております。
>
> そこで、まことに勝手ながら、faultDetailにcauseの情報も含めていただけると
> 助かるのですがお願いできませんでしょうか?
>
>
> 稚拙ながら、
> org.seasar.flex2.rpc.remoting.message.data.factory.impl.FaultFactoryImplにおいて、
> private static final String getStackTraceString(final Throwable t) {
>    String result;
>    final StringWriter stringWriter = new StringWriter();
>    final PrintWriter printWriter = new PrintWriter(stringWriter);
>    try {
>        t.printStackTrace(printWriter);
>        printWriter.flush();
>        result = stringWriter.toString();
>    } finally {
>        if (printWriter !=null) {
>            printWriter.close();
>        }
>    }
>    result = result.replaceAll("\r", "");
>    return result;
> }
> みたいに変更すれば可能かと考えておりますが、いかがでしょうか?
> # replaceAll使ってたりとか性能的に問題があるかものソースではあるのですが・・・
>
> 以上、お忙しい中申し訳ありませんが、ご検討していただけると助かります。
> _______________________________________________
> akabana-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
>


akabana-user メーリングリストの案内