java-如何获取Spring 2.5 HTTP远程调用的响应大小?

我一直在搜寻Spring 2.5中的org.springframework.remoting.httpinvoker软件包,试图找到一种方法来获得对响应大小的可见性,但是我一直在绕圈.

通过在这里看到的另一个问题,我认为我想做的是在InputStream上获取一个表示服务器响应的句柄,然后将其包装为Apache commons-io CountingInputStream.这样做的最佳方法是什么?

目前,我只希望打印对stdout的响应的大小就满意了,但是最终我希望将其存储在我的应用程序中的知名位置以进行可选显示.

最佳答案
您正在按照正确的思路思考,只需要充实细节即可.振作起来,我要用一堆长长的班级名字打你…

生成与远程服务对话的存根的客户端工厂是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的新实例,然后将字节数公开给您的用户界面.

相关文章

Spring Cloud为Spring Boot应用程序提供Netflix OSS集成。 提供的功能模块包括服务发现(Eureka),断路...
Spring Cloud 学习笔记;maven配置;入门学习;基于Spring Boot 实现;服务端配置,客户端配置;
可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的...
Spring中各种方式进行日期时间处理,有作用于单个实体的,也有作用于全局的,有作用于请求入参的,有作...
跨域资源共享(Cross-origin resource sharing)(CORS)是W3C的标准,大部分的浏览器都实现了这个标准...
Spring Boot使创建基于Spring的应用程序变得轻松,大部分的SpringBoot应用程序都只需要很少的Spring配置...