Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何补救Java中过早出现的文件结束异常_Java_Xml_Parsing - Fatal编程技术网

如何补救Java中过早出现的文件结束异常

如何补救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

我不知道发生了什么,这让我发疯了

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

问题似乎出在这个方法中,我已经标记了可疑代码行:

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响应……这就是它格式不正确的原因