以下是代码:
package com.JDomconenter;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;//import com.JDomConvertText.jdbcinfo;import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Configertion { private Element root;
private Map m = new HashMap();
private static final String fileName = "driver-database.xml";
private static Configertion conf = new Configertion(); // 单例模式 1私有化构造函数2.提供一个返回该类实例的静态方法3.定义一个静态变量去接收
public static Configertion getConfiguration() { if (conf != null) {
return conf;
} else
return null;
} private Configertion() {
SAXBuilder builder = new SAXBuilder(); try {
Document doc = builder.build(Thread.currentThread()
.getContextClassLoader().getResourceAsStream(fileName));
root = doc.getRootElement(); beansInfo();
getJdbcInfo(); } catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void getJdbcInfo() {
try {
Element driver = (Element) XPath.selectSingleNode(root,
"//configration/jdbc-info/driver");
String drivertext = driver.getText();
//System.out.println(drivertext); Element url = (Element) XPath.selectSingleNode(root,
"//configration/jdbc-info/url");
String urltext = url.getText();
//System.out.println(urltext); Element username = (Element) XPath.selectSingleNode(root,
"//configration/jdbc-info/username");
String usernametext = username.getText();
//System.out.println(usernametext); Element password = (Element) XPath.selectSingleNode(root,
"//configration/jdbc-info/password");
String passwordtext = password.getText();
//System.out.println(passwordtext); jdbcinfo info = new jdbcinfo();
info.setDriver(drivertext);
info.setUrl(urltext);
info.setUsername(usernametext);
info.setPassword(passwordtext); } catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public void beansInfo() { String id;
Object o = null;
try {
List list = XPath.selectNodes(root, "//configration/beans/bean"); for (int i = 0; i < list.size(); i++) {
Element elt = (Element) list.get(i);
id = elt.getAttributeValue("id"); String classname = elt.getAttributeValue("class");
o = Class.forName(classname).newInstance();
m.put(id, o);
}
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public Object getObject(Class c) {
return m.get(c.getName());
} public static void main(String[] args) {
// TODO Auto-generated method stub
Configertion cof = Configertion.getConfiguration();
ConnectionManager con = (ConnectionManager) cof
.getObject(ConnectionManager.class);
con.getConnection();
}}
异常错误:
各位大哥怎么解决这个异常。
java.net.MalformedURLException
at java.net.URL.<init>(URL.java:601)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:865)
at com.JDomconenter.Configertion.<init>(Configertion.java:36)
at com.JDomconenter.Configertion.<clinit>(Configertion.java:21)
Exception in thread "main" java.lang.NullPointerException
at com.JDomconenter.Configertion.main(Configertion.java:127)

解决方案 »

  1.   

    代码没格式..
    根本看不清思路.至少也得标明哪一行出了问题吧.Document doc = builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)); 应该是这行出了问题吧..如果这样写,XML文件要放在与classes同级的目录里面..建议要不用这种方法this.getClass().getResource(fileName);把XML文件放在与当前class文件同级目录.