no valid entries or contents found this is not a valid ooxml.docx
암호화된 Excel 문서를 업로드하여 데이터를 추출해 그대로 출력해주는 프로그램을 개발중이었다.
1) 암호화 Excel 문서를 업로드하면서
no valid entries or contents found this is not a valid ooxml.docx 에러가 났다.
2) 엑셀파일 경로를 읽어 DrmUtil Class를 호출하였고, DrmUtil Class에서 오류가 발생함을 Log를 통해 확인하였다..
소스를 분석해보니 뭔가 이상한점을 발견했다.
-여기서 datPath는 Drm해제를 시켜주는 파일의 path 값을 정의.
-targetFile은 내가 업로드한 Excel의 파일 path 값을 정의
3) 문제는 파일체크를 하지 못했던 것.
이유를 살펴보니, 파일을 읽어들이는 BufferedInputStream의 in 객체를
사용하기도 전에 in.close를 해줬던 것.
>> 소스 보안검토를 하면서 ‘사용한 자원은 닫아라’는 오류를 수정하다가
in을 사용하기도 전에 닫아버린 실수였다.
<에러발생 소스>
try
{
in = new BufferedInputStream( new FileInputStream( FileSample ) ); // in 정의
out = new BufferedOutputStream( new FileOutputStream( FileOut ) );
//문제소스. in을 사용하기도 전에 close 해버리고
in.close();
out.close();
}
catch( EpptlException e )
{
System.out.println( "스트림 객체 생성 에러입니다." );
return false;
} catch (FileNotFoundException e) {
logger.error("encrypt FileNotFoundException"); // TODO
} catch (IOException e) {
logger.error("encrypt IOException"); // TODO
}finally{
//finally에서 한번 더 확인후 완전히 닫아버림.
if(in != null){
try{ in.close();
}catch(EpptlException e){
} catch (IOException e) {
//e.printStackTrace();
}
}
if(out != null){
try{ out.close();}
catch(EpptlException e){
} catch (IOException e) {
//e.printStackTrace();
}
}
}
……………일부생략
// 암호화 및 파라미터 점검을 합니다.
OutFileLength =
clMadn.lGetEncryptFileSize
(
piAclFlag, // ACL 참조 방식( 고정값 0 )
….일부생략
strReserved04, // 지정 필드4
strReserved05, // 지정 필드5
//그런데 닫혀진 in 객체를 가져다 사용하려니 오류가 났던 것
in.
);
<수정한 뒤 소스>
try { in = new BufferedInputStream( new FileInputStream( FileSample ) ); out = new BufferedOutputStream( new FileOutputStream( FileOut ) ); // 여기에 있었던 close 는 삭제 } catch( EpptlException e ) { System.out.println( "스트림 객체 생성 에러입니다." ); return false; } catch (FileNotFoundException e) { logger.error("encrypt FileNotFoundException"); // TODO } catch (IOException e) { logger.error("encrypt IOException"); // TODO } // 여기에 있었던 finally는 삭제 // create instance // 암호화 클래스 생성 try { …중간생략 // 암호화 및 파라미터 점검을 합니다. OutFileLength = clMadn.lGetEncryptFileSize ( piAclFlag, // ACL 참조 방식( 고정값 0 ) ….중간생략 strReserved05, // 지정 필드5 in // 아직 in을 close 해주지 않아 사용가능. ); . ……………중간생략 } catch( EpptlException e ) { }finally{ // class 끝나기 직전 in close ~~ if(in != null){ try{ in.close(); }catch(EpptlException e){ } catch (IOException e) { //e.printStackTrace(); } } if(out != null){ try{ out.close();} catch(EpptlException e){ } catch (IOException e) { //e.printStackTrace(); } } }
해당 소스 관련 두번째 에러가 있었다.
소스와는 관련된 이야기가 아니지만 기록.
분명 같은 소스인데, 개발계와 테스트계에선 되고 운영계에서는 안되는 것 ㅠㅠ
(Drm으로 암호화된 문서를 계속 drm 안 걸린 문서라고 내뱉는 문제가 발생)
알고 보니
개발계 drm서버와
운영계 drm서버에서
다른현상을 보이고 있었음
(운영계에서 drm서버에 접속x)
drm 서버 문제가 해결될때까지 기다렸다 ^^ 허허헣
'Language > Java' 카테고리의 다른 글
JAVA 파일다운로드 에러 (HTTP response 413 error / Tomcat 파일다운로드 에러) (0) | 2019.07.31 |
---|---|
Garbage Collection 쉽게 정리! (0) | 2019.06.21 |
인터페이스(interface) 개념정리 / abstract vs interface (펌) (0) | 2019.02.18 |
자바스크립트 대용량 데이터 처리 (게시판 관리자페이지 데이터 일괄 수정작업) (0) | 2019.01.24 |
Java에서 Javascript 사용하는 방법 (로그인/로그아웃 자바소스 예제포함) (0) | 2018.12.11 |