Tomcat 6: comment faire pour supprimer les fichiers temporaires après un appel de la méthode web est terminé?
J'ai un fichier temporaire avec les données renvoyées dans le cadre d'une réponse SOAP via une MTOM pièce jointe binaire. Je tiens à la poubelle dès que l'appel de la méthode "extrémités" (c'est à dire, des finitions de transfert). Quelle est la meilleure façon pour moi de faire cela? La meilleure façon de comprendre comment le faire c'est de les supprimer lorsque la session est détruite, mais je ne sais pas si il y a de plus "immédiat" de façon à ce faire.
Pour info, je ne suis PAS à l'aide de l'Axe, je suis à l'aide de jax-ws, si ce qui compte.
Mise à JOUR: je ne suis pas sûr de la answerers sont vraiment à comprendre le problème. Je sais comment faire pour supprimer un fichier en java. Mon problème est le suivant:
@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;
}
}
OriginalL'auteur Jen A | 2008-10-01
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré ce même problème. Le problème est que le JAX-WS pile gère le fichier. Il n'est pas possible de déterminer dans votre code lorsque JAX-WS est fait avec le fichier si vous ne savez pas quand le supprimer.
Dans mon cas, je suis à l'aide d'un DataHandler sur mon modèle d'objet plutôt que d'un fichier. MyFileResult aurait le champ suivant au lieu d'un fichier de champ:
Ma solution a été de créer une version personnalisée de FileDataSource. Au lieu de retourner un FileInputStream de lire le contenu du fichier, je retourne l'extension suivante de FileInputStream:
Essentiellement la source de données permet de lire qu'une seule fois. Après le flux est fermé, le fichier est supprimé. Depuis le JAX-WS pile ne fait que lire le fichier une fois, il fonctionne.
La solution est un peu un hack, mais semble être la meilleure option dans ce cas.
OriginalL'auteur Chris Dail
Êtes-vous à l'aide de java standard les fichiers temporaires? Si oui, vous pouvez faire ceci:
OriginalL'auteur Steven M. Cherry
le dossier de travail que vous avez mis en place dans le contexte de cette webapp que vous êtes en train de parler. Pouvez-vous définir ce répertoire de travail dans un répertoire ? Si oui, alors vous pouvez trouver le fichier temp dans le temp répertoire de travail(que vous connaissez). Une fois que vous trouvez, vous pouvez le supprimer.
OriginalL'auteur anjanb