2011-10-20 12 views
2

我使用Java 6中,試圖解析該命名空間較少的XML過早結束......org.xml.sax.SAXParseException:文件

<gen type='section' name='Gen Info'>  
    <pmult type='input' name='Price Multiplier' nwidth='200' vlength='10'> 
     1000.0 
    </pmult> 
    <tunit type='input' name='Trading Unit' nwidth='200' vlength='10'> 
     BBL 
    </tunit> 
    <tmsure type='input' name='Trading Measure' nwidth='200' vlength='10'> 
     1000.0 
    </tmsure> 
</gen> 

,並得到這個錯誤...

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) 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124) 
at com.cme.clearing.commons.xmlparser.XMLParser.parse(XMLParser.java:53) 
at com.cme.clearing.commons.xmlparser.XMLParser.parse(XMLParser.java:35) 
at com.cme.clearing.commons.xmlparser.XMLParser.parse(XMLParser.java:80) 
at com.cme.clearing.commons.xmlparser.XMLParser.parse(XMLParser.java:35) 
at com.cme.clearing.commons.xml.DNodeTest.testParsingNodeWithChildNodes(DNodeTest.java:76) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

下面是我使用的是分析它的Java代碼...

public static com.cme.clearing.commons.xml.Node parse(String xml) throws 
     ParserConfigurationException, SAXException, IOException { 
    xml = xml.trim(); 
    return parse(new ByteArrayInputStream(xml.getBytes())); 
} 

public static com.cme.clearing.commons.xml.Node parse(final InputStream xmlInputStream) 
     throws ParserConfigurationException, 
     SAXException, IOException { 

    final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    final DocumentBuilder db = dbf.newDocumentBuilder(); 
    final Document doc = db.parse(xmlInputStream); 

任何想法是畸形有關XML或有什麼錯解析升邏輯? - 戴夫

+0

什麼是'com.cme.clearing.commons.xml.Node'?它應該是'org.w3c.dom.Node'。 – lkuty

+0

此代碼在我身邊成功解析了這個xml(sun jdk 1.6.0_16)。 – svaor

+0

也許你必須使用雙引號而不是單引號來表示屬性。 – Michael

回答

1

我認爲這可能是該版本SAXParser中的一個錯誤。這與我的IBM JDK碰到了同樣的問題。我最終使用-Xbootclasspath選項來放入不同版本的SAXParser(下載xerces.jar和xml-api.jar)以解決問題。巨大的痛苦,但它的作品。

+0

Miond闡述了你是如何做到的? – Manish

相關問題