[英]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.