2016-10-07 67 views
-2

面对Xerces罐子的一个奇怪问题。我将我的代码迁移到不同的工作区中。有一部分代码使用org.w3c.dom XML类。现在我迁移了代码,同样的代码抛出异常。Xerces JAR导致异常

import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Text; 
import org.xml.sax.SAXException; 

但是,当我调试它创建的对象的类型为:

org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 

不知道在哪里的Xerces类走进画面。这导致代码失败。

与代码更新:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setIgnoringComments(true); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
InputSource inputSource = new InputSource(); 
inputSource.setCharacterStream(new StringReader(xmlString)); 
Document document = builder.parse(inputSource); 

String grade = "A"; 
NodeList nodes = document.getElementsByTagName("student"); 
if (!routeLimit.equals("")) { 
    Text gradeText = document.createTextNode(grade); 
    Element gradeTag = document.createElement("grade"); 
    gradeTag .appendChild(gradeText); 
    nodes.item(0).appendChild(gradeTag); 
} 

线: nodes.item(0).appendChild(gradeTag);

引发空指针异常。

此外,当我调试代码,文档变量[#document:null]的值,我检查了这个网站,看到很多人面临同样的问题。但是很少有具体的答案。

+0

是否有可能知道到目前为止抛出的异常究竟是什么? 'org.apache.xerces.jaxp.DocumentBuilderFactoryImpl'实现了'javax.xml.parsers.DocumentBuilderFactory',所以导入不是你的异常的根。 – potame

+0

其空指针异常。 –

+0

检查旧工作区中的依赖关系。你确定你在那里使用了相同版本的xerces,或者是其他XML类的实现吗?从Xerces转到Saxon之后,我曾遇到类似的问题。 –

回答

0

问题在于XML名称空间。

我不得不设置:

domFactory.setNamespaceAware(true); 

,然后取使用节点:

NodeList nodes = document.getElementsByTagName("ml:student"); 

的于溶液偶然类。没有命名空间之前,相同的代码工作。