你的思路是正确的,它只需要用细节来充实。振作起来,我要用一堆长的类名来打击你……
生成与远程服务对话的存根的客户端工厂是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
然后将字节数暴露给您的用户界面。