私は現在、会社のネットワーク構成の変更から回復しています。これにより、ユーザーが 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());
正常に動作し、モデル オブジェクトとバイナリ データをアプリケーション サーバーに送信できます。しかし、その逆を行うにはどうすればよいでしょうか?つまり、モデル オブジェクトとバイナリ データを 1 つの応答で返すのでしょうか? マルチパート応答と、それらを複数のブラウザで使用する方法について読みましたが、commons-httpclient を使用して実装する方法、または springs RestTemplate を使用してさらに甘い方法で実装するにはどうすればよいでしょうか?