Я столкнулся с этой же проблемой. Проблема заключается в том, что стек JAX-WS управляет файлом. Невозможно определить в вашем коде, когда JAX-WS выполняется с файлом, поэтому вы не знаете, когда его удалить.
В моем случае я использую DataHandler в моей объектной модели, а не в файле. MyFileResult будет иметь следующее поле вместо поля файла:
private DataHandler handler;
Мое решение состояло в том, чтобы создать настроенную версию FileDataSource. Вместо того, чтобы возвращать FileInputStream для чтения содержимого файла, я возвращаю следующее расширение FileInputStream:
private class TemporaryFileInputStream extends FileInputStream {
public TemporaryFileInputStream(File file) throws FileNotFoundException {
super(file);
}
@Override
public void close() throws IOException {
super.close();
file.delete();
}
}
По сути, источник данных позволяет читать только один раз. После закрытия потока файл удаляется. Поскольку стек JAX-WS читает файл только один раз, он работает.
Решение немного взломано, но в данном случае кажется лучшим вариантом.