1

このメソッドを使用して、いくつかの構成情報を格納する 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>

完全に整形式ではないかもしれませんが、有効なはずです。実際には、この xml は、コードの catch ブロックで解析メソッドがクラッシュしてエラーが発生した後に保存された backup.xml です。

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

どういうわけかスレッドに関連できますか?みんな、ありがとう

更新 ドキュメントビルダーのエラーハンドラーを作成しましたが、もう一度言います

致命的なエラー: ファイルの終わりが早すぎる

4

1 に答える 1

0

ファイルへのアクセスが同期されていなかったため、それが例外の原因のようです。助けてくれてありがとう

于 2013-09-17T08:21:17.440 に答える