3

私はSpring2.5でorg.springframework.remoting.httpinvokerパッケージをざっと見て、応答のサイズを可視化する方法を見つけようとしていましたが、私は円を描いて回り続けています。

ここで見た別の質問を介して、私がやりたいのはInputStream、サーバーからの応答を表すハンドルを取得し、それをApachecommons-ioでラップすることだと思いますCountingInputStream。これを行うための最良の方法は何ですか?

今のところ、stdoutへの応答のサイズを印刷するだけで満足しますが、最終的には、オプションの表示のために、アプリ内のよく知られた場所に保存したいと思います。

4

2 に答える 2

2

あなたは正しい方向に沿って考えています、それはただ詳細を具体化する必要があります。気を引き締めてください、私はたくさんの長いクラス名であなたを襲うつもりです...

リモートサービスと通信するスタブを生成するクライアント側のファクトリはですHttpInvokerProxyFactoryBean。スーパークラス(HttpInvokerClientInterceptor)には、というプロパティがhttpInvokerRequestExecutorあり、デフォルトでは。のインスタンスになりますSimpleHttpInvokerRequestExecutor

これは、サブクラス化と拡張に適しています。具体的には、decorateInputStream使用できるメソッドがあります。

public class CountingHttpInvokerRequestExecutor extends SimpleHttpInvokerRequestExecutor {
   @Override
   protected InputStream decorateInputStream(InputStream is) throws IOException {
      return new CountingInputStream(super.decorateInputStream(is));
   }
}

そして、それをプロキシファクトリに注入します。

<bean class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="httpInvokerRequestExecutor">
        <bean class="com.mycompany.CountingHttpInvokerRequestExecutor"/>
    </property>
      <!-- Plus the various other properties required by HttpInvokerProxyFactoryBean  -->
      <!-- URL, proxy interface, etc -->
</bean>

次に、その情報を入手するための秘訣があります。これには、創造的な再配線が必要になります。たとえば、CountingInputStreamどこかの別のファクトリからの新しいインスタンスを取得すると、バイトカウントがユーザーインターフェイスに公開されます。

于 2010-03-22T20:34:26.817 に答える
1

上記は、Input/OutputStreamsを接続するために必要なことのほとんどでした。commons-io CountingStreamsのclose()メソッドをオーバーライドして、そのセッション中に読み取り/書き込みされた合計バイト数を単純に報告するための情報を実際に報告する最後のステップ。ログを使用してそれを印刷し、そこに行きます!これには、サイズを特定のサービスコールに一致させることができないという欠点がありますが、これをさらにオーバーライドするSimpleHttpInvokerRequestExecutorと、ログが同期的に発生する必要がありますが、さらにログを追加する可能性があります。これは疑わしい仮定です。

于 2010-05-18T15:48:38.893 に答える