Вы думаете по правильному пути, это просто требует уточнения со спецификой. Готовьтесь, я ударю вас кучей длинных имен классов ...
Фабрика на стороне клиента, которая генерирует заглушку, которая обращается к удаленной службе, - 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
из другой фабрики, которая затем выставила бы количество байтов в вашем пользовательском интерфейсе.