我有以下几点:NullPointerException异常,而试图解析XML文件
public static void main(String args[]) {
// upload config' data for program - param' are path and Xml's Root node/ where to get data from
confLoader conf = new confLoader("conf.xml", "config");
System.out.println(conf.getDbElement("dataSource"));
System.out.println(conf.getDbElement("dataSource"));
System.out.println(conf.getDbElement("dataSource")); // Fails
...
这是负责建立DOM和( 'getDbElement()')解析代码:
public class confLoader{
DocumentBuilderFactory docBuilderFactory;
DocumentBuilder docBuilder;
Document doc;
NodeList nList;
public confLoader(String path, String XmlRoot){
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse(new File(path));
// normalize text representation
doc.getDocumentElement().normalize();
nList = doc.getElementsByTagName(XmlRoot);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getDbElement(String element) {
Node nNode = nList.item(0); // 1st item/node - sql
try {
if (nNode.getNodeType() == Node.ELEMENT_NODE) { ///// Line 36 - Problematic
Element eElement = (Element) nNode;
return (((Node) eElement.getElementsByTagName(element).item(0).getChildNodes().item(0)).getNodeValue());
}
} catch (Exception ex) {
System.out.println("Error retrieving " + element + " :" + ex.getMessage());//Thread.dumpStack();
ex.printStackTrace();
}
return "not available";
}
}
堆栈跟踪给定代码:
jdbc:mysql://localhost:...
java.lang.NullPointerException
jdbc:mysql://localhost:...
Error retrieving dataSource :null
not available
at exercise.confLoader.getDbElement(confLoader.java:36)
at exercise.Exercise.main(Exercise.java:22)
Line 36 : if (nNode.getNodeType() == Node.ELEMENT_NODE)
xml解析完成两次,第三次尝试从xml解析时,我得到NullPointerException。
使用一些println()或者用调试器遍历代码来查看哪个对象为null,然后可以计算出如何修复它。究竟是什么情况发生?你有没有堆栈跟踪? – DNA
也显示你的堆栈跟踪。 – basiljames
你在'getDbPath()','getDbUser()'和'getDbPassword()'中看到了一些模式吗?你认为你可以做一些改变,只有一种方法?这只是一个提示。 – maba