Отправка модельного объекта и двоичного потока в одном ответе из нескольких частей
В настоящее время я восстанавливаюсь после изменения конфигурации сети компании, которое привело к передаче файлов в моем приложении для управления документами, когда пользователи подключены через VPN. Связь между расширенным клиентом и моим сервером приложений осуществляется с помощью Springs HttpInvoker, для передачи файлов используется RMIIO. RemoteInputStream был просто атрибутом в моем объекте модели, который представлял файл, который я передал.
Так или иначе, я должен заменить RMIIO (DirectRemoteInputStream здесь не является решением) и поиграть с простой потоковой передачей HTTP. Я хочу отправить сериализованный объект модели и двоичные данные в потоке на сервер, который до сих пор работал нормально, используя многочастный запрос:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(...);
MultipartEntity multipartEntity = new MultipartEntity();
InputStreamBody filePart = new InputStreamBody(new FileInputStream(file), "application/octet-stream", file.getName());
// this is my model object
byte[] serializedFileObject = serializeObject(fileObject);
multipartEntity.addPart("file", filePart);
multipartEntity.addPart("fileObject", new ByteArrayBody(serializedFileObject, "fileObject.ser"));
post.setEntity(multipartEntity);
HttpResponse response = client.execute(post);
EntityUtils.consume(response.getEntity());
Работает нормально, и я могу отправлять объекты модели и двоичные данные на сервер приложений. Но как поступить наоборот - вернуть объект модели и двоичные данные в одном ответе? Я читал о многочастных ответах и о том, как их можно использовать в нескольких браузерах, но как реализовать их с помощью commons-httpclient - или даже слаще, используя пружины RestTemplate?