2013-08-20 3 views
0

몇 주 전에 나는 여기에 issue을 게시했습니다. 이제는 다른 경우에 비슷한 문제가 있습니다. 자바 업로드를 만들었는데 XML 파일이 잘 구성되었는지 확인하고 싶었습니다. 확인 후 삭제하고 싶습니다. 그러나 변환에 실패하면 파일을 삭제할 수 없습니다. 동일한 문제가있는 로컬 컴퓨터에서 실행하는 데 훨씬 쉬운 예제를 만들었습니다. 내 소스 코드는 아래를 참조하십시오. 손쉽게 복사하여 붙여 넣기를 할 수 있습니다.Saxon XML 유효성 검사 : 유효성 검사가 실패했을 때 XML 파일을 삭제할 수 없습니다.

몇 주 전에보고 한 버그와 같은 버그를 발견 했습니까? 코드에서 뭔가를 놓쳤습니까? 나는 Saxon 9.4HE를 사용했다.

public class TestClass 
{ 
public static void main (String[] args) throws Exception 
{ 
    boolean isWellFormed = isXMLwellformed(new File("work/file.xml")); 

    if(isWellFormed) System.out.println("File is well formed"); 
    else 
    { 
     System.out.println("File is not well formed"); 
    } 
    FileUtils.deleteDirectory(new File("work")); 
} 

private static boolean isXMLwellformed(File file) 
{ 
    boolean isWellformed = true; 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    StreamSource source = new StreamSource(file); 
    try 
    { 
     Transformer trans = factory.newTransformer(); 
     SAXResult sink = new SAXResult(new DefaultHandler()); 
     trans.transform(source, sink); 
    } 
    catch (TransformerException err) 
    { 
     System.err.println("Validation failed: " + err.getMessage()); 
     isWellformed = false; 
    } 
    return isWellformed; 
} 
} 
+0

Saxon 9.5에서 문제가 계속 발생하는지 확인해주세요. –

답변

1

이제는 작동하는 해결책을 찾았습니다. 필자 혼자서 FileReader를 만들고 catch 블록에서 닫으면 작동합니다. 그러나 자동으로 닫히지 않아야합니까?

private static boolean isXMLwellformed(File file) throws IOException 
    { 
    boolean isWellformed = true; 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    StreamSource source = new StreamSource(br); 
    try 
    { 
     Transformer trans = factory.newTransformer(); 
     SAXResult sink = new SAXResult(new DefaultHandler()); 
     trans.transform(source, sink); 
    } 
    catch (TransformerException err) 
    { 
     System.err.println("Validation failed: " + err.getMessage()); 
     br.close(); 
     isWellformed = false; 
    } 
    return isWellformed; 
    }