简体   繁体   English

org.xml.sax.SAXParseException:文件过早结束

[英]org.xml.sax.SAXParseException: Premature end of file

I have this piece of code which gives to SAXParseError ie, it is not getting the content, but the same thing when i use in my test pg it works correctly.我有这段代码提供给SAXParseError即,它没有获取内容,但是当我在我的测试 pg 中使用它时,它工作正常。 Here i am providing my original code piece, can any1 figure out what is the problem在这里我提供我的原始代码片段,any1 可以找出问题所在

This is the part where I fetch a xml and append a node to it but it seems that i am not able to get the file itself这是I fetch a xml and append a node to it的部分,但似乎我无法获取文件本身

String atemp=readFileAsString("../webapps/abc/include/xml/data.xml")

        log.info("ok thats good")

        String[] splitString=res.split(",")

        log.info(atemp)

        try
        {
            def root = new XmlSlurper().parseText(atemp)
        }
        catch(Exception e)
        {
            log.debug("parse errror: "+e)
        }
        root.appendNode {
          row {
            name(splitString[1])
            host(splitString[2])
            desc(splitString[3])
            product(splitString[4])
            type(splitString[5])
            time(splitString[6])
            by(splitString[7])
          }
        }

        def outputBuilder = new StreamingMarkupBuilder()
        String temp = outputBuilder.bind{ mkp.yield root }

        File file = new File("../webapps/abc/include/xml/data.xml");
        BufferedWriter output = new BufferedWriter(new FileWriter(file));
        output.write(temp);
        output.close();
        log.info(temp)

my readFileAsString function我的readFileAsString function

private String readFileAsString(String filePath) {
    try
    {
        StringBuffer fileData = new StringBuffer();
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        log.info(reader==null);
        char[] buf = new char[1024];
        int numRead=0;
        while((numRead=reader.read(buf)) != -1){
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
            log.info(readData)
        }
        reader.close();
        log.info("File Content\n"+fileData.toString());
        return fileData.toString();
    }
    catch (Exception e) 
    {
        log.info(e);
    }
}

Output Output

INFO http-5050-Processor24 com.abc.helper.WriteXml - false
INFO http-5050-Processor24 com.abc.helper.WriteXml - File Content
INFO http-5050-Processor24 com.abc.helper.WriteXml - ok thats good

Note : I am able to open the file in my test program with the same path注意:我可以在我的测试程序中使用相同的路径打开文件

Assuming this is in Groovy, I believe you can replace all of your code with:假设这是在 Groovy 中,我相信您可以将所有代码替换为:

File f = new File( '../webapps/abc/include/xml/data.xml' )
def root = new XmlSlurper().parse( f )
String[] splitString = res.split( ',' )
root.appendNode {
  row {
    name(splitString[1])
    host(splitString[2])
    desc(splitString[3])
    product(splitString[4])
    type(splitString[5])
    time(splitString[6])
    by(splitString[7])
  }
}
def outputBuilder = new StreamingMarkupBuilder()
String newXml = outputBuilder.bind{ mkp.yield root }
f.text = newXml

But I repeat , doing this inside a web application is probably a bad idea as if two threads call this code at the same time, the file is going to be unpredictable (and get more unpredictable as it gets larger)但是我再说一遍,在 web 应用程序中执行此操作可能是一个坏主意,因为如果两个线程同时调用此代码,文件将是不可预测的(并且随着文件变大变得更加不可预测)

Also, you might want to change:此外,您可能想要更改:

File f = new File( '../webapps/abc/include/xml/data.xml' )

to

File f = new File( "${System.properties['catalina.base']}/webapps/abc/include/xml/data.xml" )

As suggested to you in a previous question of yours正如您在上一个问题中向您建议的那样

The readFileAsString method looks OK, but if the log output is to believed then your application is reading an empty file, and that's what is causing the XML parse exception. readFileAsString方法看起来不错,但如果相信日志 output 则您的应用程序正在读取一个空文件,这就是导致 XML 解析异常的原因。

The first thing to check is that the pathname of the file you are attempting to read is actually correct, and that the file at that location is not actually empty.首先要检查的是您尝试读取的文件的路径名实际上是否正确,并且该位置的文件实际上不是空的。 Try adding this line at the beginning of readFileAsString尝试在readFileAsString的开头添加这一行

log.info("file size is " + new File(filePath).length());

Note that zero means either the file does not exist, or it is empty.请注意,零表示文件不存在或为空。


Looking at the rest of the code, your application seems to be reading the file, doing something to it and then writing it back to the same place .查看代码的 rest ,您的应用程序似乎正在读取文件,对其执行某些操作,然后将其写回同一位置 Consider the possibility that it is the code that is generating the output that is broken... and your application is attempting to read and parse a file that it has previously clobbered.考虑可能是生成 output 的代码被破坏了......并且您的应用程序正在尝试读取和解析它之前破坏的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.xml.sax.SAXParseException:*VALID* XML 的文件过早结束 - org.xml.sax.SAXParseException: Premature end of file for *VALID* XML org.xml.sax.SAXParseException:过早的结束文件 - org.xml.sax.SAXParseException: Premature end file 轴:faultString:org.xml.sax.SAXParseException:文件过早结束 - Axis: faultString: org.xml.sax.SAXParseException: Premature end of file org.xml.sax.SAXParseException:带有jaxbUnmarshaller的文件过早结束 - org.xml.sax.SAXParseException: Premature end of file with jaxbUnmarshaller org.xml.sax.SAXParseException:文件过早结束 - org.xml.sax.SAXParseException: Premature end of file 引起原因:org.xml.sax.SAXParseException:文件过早结束 - Caused by: org.xml.sax.SAXParseException: Premature end of file 文件过早结束。 org.xml.sax.SAXParseException; 文件过早结束。[致命错误]:-1:-1: - Premature end of file. org.xml.sax.SAXParseException; Premature end of file.[Fatal Error] :-1:-1: org.xml.sax.SAXParseException; 尝试从请求中获取 xml 输入时文件过早结束 - org.xml.sax.SAXParseException; Premature end of file when trying to get an xml input from request 解析RSS时出错-> org.xml.sax.SAXParseException; lineNumber:1; columnNumber:1; 文件过早结束 - Error Parsing RSS -> org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file Java JaxB Unmarshaller提供org.xml.sax.SAXParseException文件的过早结尾 - Java JaxB Unmarshaller giving org.xml.sax.SAXParseException Premature end of file
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM