Прогресс загрузки клиента из Джерси

У меня есть клиент из трикотажа, которому нужно загрузить файл, достаточно большой, чтобы требовался индикатор выполнения.
Проблема в том, что для загрузки, которая требует несколько минут, я вижу, что переданные байты достигают 100% , как только приложение запускается . Затем требуется несколько минут, чтобы напечатать строку «окончено».
Это как если бы байты были отправлены в буфер, и я считывал скорость передачи с -на -буфера вместо фактической скорости загрузки . Это делает индикатор выполнения бесполезным.

Это очень простой код:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource("www.myrestserver.com/uploads");
WebResource.Builder builder = resource.type(MediaType.MULTIPART_FORM_DATA_TYPE);

FormDataMultiPart multiPart = new FormDataMultiPart();
FileDataBodyPart fdbp = new FileDataBodyPart("data.zip", new File("data.zip"));
BodyPart bp = multiPart.bodyPart(fdbp);
String response = builder.post(String.class, multiPart);

Чтобы получить состояние прогресса, я добавил фильтр ContainerListener, очевидно, перед вызовом builder.post:

final ContainerListener containerListener = new ContainerListener() {

        @Override
        public void onSent(long delta, long bytes) {
            System.out.println(delta + " : " + long);
        }

        @Override
        public void onFinish() {
            super.onFinish();
            System.out.println("on finish");
        }

    };

    OnStartConnectionListener connectionListenerFactory = new OnStartConnectionListener() {
        @Override
        public ContainerListener onStart(ClientRequest cr) {
            return containerListener;
        }

    };

    resource.addFilter(new ConnectionListenerFilter(connectionListenerFactory));
8
задан AgostinoX 20 July 2012 в 18:13
поделиться