2013-02-26 1 views
1

Я использую этот метод, чтобы проверить файл XML, который хранит некоторые конфигурации информация:Преждевременный конец файла синтаксического анализа XML

public static boolean isXmlFileWellFormed(File xmlFile) { 
    logger.log(Level.INFO, "isXmlFileWellFormed({0})", xmlFile); 
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder; 
    try { 
     builder = builderFactory.newDocumentBuilder(); 
     builder.parse(xmlFile); 
     return true; // document well formed 
    } catch (Throwable ex) { 
     logger.log(Level.WARNING, "Xml file is not well-formed: {0}", ex); 
     try { 
      FileUtils.streamToFile(new FileInputStream(xmlFile), "c:\\backup.xml"); 
     } catch (IOException ex1) { 
      logger.log(Level.WARNING, "backup not created"); 
     } 
    } 
    return false; 
} 

он проверяет файл XML так, это выглядит как

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<mountedFolders> 

<folder path="C:\tmp\prezentacka\" recursively="false"> 
     <document key="1636_0001_pdf_1.png;539777;1338204039646"> 
      <state>NEW</state> 
     </document> 
    <document key="faktura.pdf;1102305;1336552599405"> 
      <state>NEW</state> 
     </document> 
    <document key="prva strana_1361268270589.JPEG;276888;1361269977428"> 
      <state>NEW</state> 
     </document> 
    </folder> 
<folder path="C:\tmp\one2\" recursively="false"> 
     <document key="1636_0001.pdf;280700;1336569165030"> 
      <state>NEW</state> 
     </document> 
    <document key="1636_0001_pdf_1.png;539777;1338204039646"> 
      <state>NEW</state> 
     </document> 
    <document key="1636_0001_pdf_2.png;565609;1338204041562"> 
      <state>NEW</state> 
     </document> 
    <document key="1637_0001.pdf;121031;1336569168739"> 
      <state>NEW</state> 
     </document> 
    <document key="faktura.pdf;1102305;1336552599405"> 
      <state>NEW</state> 
     </document> 
    </folder> 
<folder path="C:\tmp\" recursively="false"> 
     <document key="faktura1.pdf;637590;1340007249059"> 
      <state>NEW</state> 
     </document> 
    <document key="LicZmluva.pdf;41164;1340016186796"> 
      <state>NEW</state> 
     </document> 
    </folder> 
</mountedFolders> 

meybe ИТС не полностью сформированный, но он должен быть действительным. Actualy, этот XML является backup.xml сохраняются после того, как метод синтаксического анализа аварий в уловов блоке кода с ошибкой

[INFO] stderr.run: [Fatal Error] .mounted:1:1: Premature end of file. 
[WARNING] XmlUtils.isXmlFileWellFormed: Xml file is not well-formed: 

Можно ли каким-то образом связаны с потоками? благодарит всех

UPDATE Я создал обработчик ошибок для строителя документов, но он снова говорит

fatal error: premature end of file

+0

Ну, это не похоже на то, что вы нажимаете на свое заявление о выводе вообще - ничего не говорится о том, что «Xml-файл не правильно сформирован» –

+0

да, это написано далее в журнале, я могу его обновить, но log stderr.run странный для меня, а теперь почему он зарегистрирован следующим образом: – Zavael

+0

Я бы предположил, что '.mounted: 1: 1' означает строку 1, столбец 1 в файле' .mounted'. Таким образом, это выглядит так: '.mounted' - пустой файл. Вы уверены, что имя файла верное? Вы уверены, что он не ищет файл в неправильном каталоге? Вы открыли файл и подтвердили, что он не пуст? – Alderath

ответ

0

моих плохой, доступ к файлу не был synchronized и что выглядит как причина исключения. Спасибо всем за помощь.