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

Takahiro Ota [E-MAIL ADDRESS DELETED]
2008年 10月 25日 (土) 20:45:47 JST


ふなくら様

太田です。詳細なご回答ありがとうございます。

rootCause.faultDetailに詳細な情報が入っているのは存じていました。
但し当たり前ですがcause以下しか入ってないので、発生元は判別できても
発生先が判別できなかったりします。
なので、faultDetailとrootCause.faultDetailの2つを合わせて見なきゃいけない
となり少し面倒だなぁと。。
# 余談ですがRemotingServiceがthrowする例外がRuntimeでない場合、
# InvocationTargetRuntimeExceptionでラップされてしまい、
# このときはrootCauseの方をみないといけない。
# というのもあり、flex側で例外の区別と情報伝達で悩んでいました。

ただ、ふなくら様のおっしゃるとおり、面倒なだけで実現は可能なので
一旦その方向で進んでみようと思います。

rootCauseの問題については今知りました。
ver1.1をstableにするには、まだまだ大変ですね。
利用しておきながらご協力できなく心苦しいのですが、
うまく解決できることを願っています

以上、貴重なお時間を割いていただきありがとうございました。

jun funakura さんは書きました:
> 太田さん
> 
> はじめまして、ふなくら(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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
> 
> 


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