Liberty では、各 DataHandler オブジェクトを出力ストリームに書き込めるのは 1 回のみです。
DataHandler オブジェクトを OutputStream オブジェクトに複数にわたって書き込むと、空のファイルができます。
javax.activation.DataHandler.writeTo(OutputStream) メソッドを呼び出した後は、DataHandler オブジェクトを別のメソッドに渡したり、それを返したり、それを後で使用するために保管したりはできません。
これを回避するには、新規の DataHandler オブジェクトを作成し、writeTo メソッドを使用して、既存の DataHandler オブジェクトから既に取得済みのコンテンツでその DataHandler オブジェクトを初期化します。例:
|
File f = new File("received_image"); if (f.exists()) { f.delete(); } FileOutputStream fos = new FileOutputStream(f); // Write the DataHandler object to the output stream. img_in.writeTo(fos); // Create a new DataHandler object and initialize it with // the content that was retrieved using the writeTo method above. FileDataSource fos_out = new FileDataSource(f); DataHandler img_out = new DataHandler(fos_out); return img_out; |