Tomcat 6 : 웹 메소드 호출이 종료 된 후 임시 파일을 삭제하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/158568

문제

MTOM 바이너리 첨부 파일을 통해 비누 응답의 일부로 반환되는 데이터가있는 임시 파일이 있습니다. 메소드 호출 "ENDER"(즉, 전송이 끝나는 즉시)마다 쓰레기를 버리고 싶습니다. 내가 이것을하는 가장 좋은 방법은 무엇입니까? 이 작업을 수행하는 방법을 알아낼 수있는 가장 좋은 방법은 세션이 파괴 될 때 삭제하는 것이지만,이를 수행 할 수있는 더 즉각적인 방법이 있는지 확실하지 않습니다.

참고로, 나는 축을 사용하고 있지 않고, 그것이 중요하다면 Jax-Ws를 사용하고 있습니다.

업데이트 : 답변자가 실제로 문제를 이해하고 있는지 확신 할 수 없습니다. Java에서 파일을 삭제하는 방법을 알고 있습니다. 내 문제는 이것입니다.

@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;
 }
}
도움이 되었습니까?

해결책

나는이 같은 문제에 부딪쳤다. 문제는 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 스택은 파일을 한 번만 읽으므로 작동합니다.

솔루션은 약간의 해킹이지만이 경우 최상의 옵션 인 것 같습니다.

다른 팁

표준 Java 온도 파일을 사용하고 있습니까? 그렇다면이 작업을 수행 할 수 있습니다.

File script = File.createTempFile("temp", ".tmp", new File("./"));
... use the file ...
script.delete(); // delete when done.

당신이 말하는이 webapp의 컨텍스트에서 설정 한 작업 폴더. 이 작업 디렉토리를 알려진 디렉토리로 설정할 수 있습니까? 그렇다면 임시 작업 디렉토리 (알고있는) 내에서 온도 파일을 찾을 수 있습니다. 찾은 후에는 삭제할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top