Tomcat 6: so löschen Sie temporäre Dateien nach einer web-Methodenaufruf beendet hat?
Habe ich eine temporäre Datei mit Daten zurückgegeben, als Teil eines SOAP-Antwort über einem MTOM binäre Anlage. Ich würde gerne trash, sobald der Aufruf der Methode "endet" (D. H., die Oberflächen zu übertragen). Was ist der beste Weg für mich, dies zu tun? Der beste Weg, ich kann herausfinden, wie dies zu tun ist, um Sie zu löschen, wenn die session zerstört wird, aber ich bin mir nicht sicher ob es eine mehr 'sofort' Weg, dies zu tun.
Zur info, ich bin NICHT mit der Achse, ich bin mit der jax-ws, wenn das zählt.
UPDATE: ich bin nicht sicher, ob die Antwort wirklich verstehen das Problem. Ich weiß, wie das löschen einer Datei in java. Mein problem ist Folgendes:
@javax.jws.WebService
public class MyWebService {
...
@javax.jws.WebMethod
public MyFileResult getSomeObject() {
File mytempfile = new File("tempfile.txt");
MyFileResult result = new MyFileResult();
result.setFile(mytempfile); //sets mytempfile as MTOM attachment
//mytempfile.delete() iS WRONG
//can't delete mytempfile because it hasn't been returned to the web service client
//yet. So how do I remove it?
return result;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche problem. Das Problem ist, dass die JAX-WS-stack verwaltet die Datei. Es ist nicht möglich zu bestimmen, in Ihrem code, wenn JAX-WS ist fertig mit der Datei, so dass Sie nicht wissen, Wann es zu löschen.
In meinem Fall, ich bin mit einem DataHandler auf mein Objekt Modell eher als eine Datei. MyFileResult hätte das folgende Feld statt einen Datei-Feld:
War meine Lösung zu erstellen, eine angepasste version von FileDataSource. Anstatt einen FileInputStream zum Lesen der Inhalte der Datei, kehre ich die folgende Erweiterung von FileInputStream:
Im wesentlichen die datasource ermöglicht das Lesen nur einmal. Nachdem der stream geschlossen wird, wird die Datei gelöscht. Da die JAX-WS-stack liest nur die Datei einmal, es funktioniert.
Die Lösung ist ein bisschen ein hack, aber das scheint die beste option in diesem Fall.
Sind Sie mit standard-java-temp-Dateien? Wenn ja, können Sie dies tun:
Ordner "work", das Sie in den Kontext dieser webapp, die Sie sprechen. Können Sie dieses work-Verzeichnis, die in einem bekannten Verzeichnis gespeichert ist ? Wenn ja, dann kann man die temp-Datei im temp-Ordner(die Sie kennen). Sobald Sie finden, können Sie es löschen.