2013-02-26 4 views
1

J'utilise cette méthode pour valider le fichier xml qui stocke certaines informations de configuration:Fin prématurée de l'analyse du fichier 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; 
} 

il valide le fichier XML bien, il ressemble à

<?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 son pas totalement bien formé mais il devrait être valide. Actualy, ce xml est le backup.xml enregistré après les accidents de la méthode d'analyse syntaxique dans le bloc de capture code avec erreur

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

Peut-on relier en quelque sorte à des fils? remercie tout le monde

MISE À JOUR J'ai créé gestionnaire d'erreurs pour le constructeur de documents, mais il dit encore

fatal error: premature end of file

+0

Eh bien, ça n'a pas l'air de frapper votre déclaration catch - il n'y a rien qui dise "Le fichier XML n'est pas bien formé" –

+0

oui il est écrit dans le journal, je peux le mettre à jour, mais le journal stderr.run est bizarre pour moi, ne pas maintenant pourquoi il est enregistré comme ceci – Zavael

+0

Je suppose que le '.monté: 1: 1' signifie ligne 1, colonne 1 dans le fichier' .mounted'. Donc, en d'autres termes, il semble que '.mounted' est un fichier vide. Êtes-vous sûr que le nom du fichier est correct? Êtes-vous sûr qu'il ne cherche pas le fichier dans le mauvais répertoire? Avez-vous ouvert le fichier et vérifié qu'il n'est pas vide? – Alderath

Répondre

0

mon mauvais, l'accès au dossier n'a pas été synchronized et qui ressemble à la cause de l'exception. Merci à tous pour votre aide

Questions connexes