如何补救Java中过早出现的文件结束异常
我不知道发生了什么,这让我发疯了 org.xml.sax.SAXParseException;文件过早结束 问题似乎出在这个方法中,我已经标记了可疑代码行:如何补救Java中过早出现的文件结束异常,java,xml,parsing,Java,Xml,Parsing,我不知道发生了什么,这让我发疯了 org.xml.sax.SAXParseException;文件过早结束 问题似乎出在这个方法中,我已经标记了可疑代码行: public static Object execXPath1(String xml, String xPath, QName type) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); logger.info("Inside
public static Object execXPath1(String xml, String xPath, QName type) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
logger.info("Inside execXPath method");
try {
logger.debug("Inside try block");
DocumentBuilder builder = factory.newDocumentBuilder();
logger.info("Created DocumentBuilder object");
logger.debug("XML:\n"+xml);
//problem is here
Document doc = builder.parse(new InputSource(new StringReader(xml)));
logger.debug("Calling execXPath (3 param)");
return execXPath2(doc, xPath, type);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
这是一个标准的DOM解析器,xml应该很好。任何帮助或建议都将不胜感激
这是我的堆栈跟踪:
[Fatal Error] :-1:-1: Premature end of file.
org.xml.sax.SAXParseException; Premature end of file.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)generalatomics
at com.generalatomics.taxengine.automation.calc.PayrollErrorTest.execXPath1(PayrollErrorTest.java:156)
at com.generalatomics.taxengine.automation.calc.PayrollErrorTest.execXPathForValue1(PayrollErrorTest.java:135)
at com.generalatomics.taxengine.automation.calc.PayrollErrorTest.getValueForInput(PayrollErrorTest.java:129)
at com.generalatomics.taxengine.automation.calc.PayrollErrorTest.testTKEErrors(PayrollErrorTest.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:696)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:882)
at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:75)
at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:14)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
听起来xml的格式不正确。你检查过了吗?缺少某个结束标记?虽然XML应该是好的,但这个解析器告诉您它不是。我建议您尝试一个可以验证的简单XML消息。我将重新查找并报告我的发现。问题出在我的XML中……实际上,问题出在我围绕可执行二进制文件构建的二进制包装器代码中。我发送到该二进制文件的编程命令行参数完全关闭,因此我没有从该二进制文件得到xml响应……这就是它格式不正确的原因