본문 바로가기
Language/Java

no valid entries or contents found this is not a valid ooxml.docx 해결방법

by 나비와꽃기린 2019. 2. 22.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


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 서버 문제가 해결될때까지 기다렸다 ^^ 허허헣