利用jdom解析hibernate.cfg.xml,本来都是在网络状况良好的情况下做的,没有任何错误。断网之后却出现了下面的错误:
java.net.UnknownHostException: hibernate.sourceforge.net
打开hibernate.cfg.xml一看,原来定义的doctype,
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
加载xml时,会自动去寻找doctype中的http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd,网络断了,自然就找不到,就报错了。
解决方法有两个:
方法一:把 XML 中的 DTD 文件下载至本地,并修改该 XML,使之应用本地的那个 DTD 文件。网络验证改为本地验证
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "hibernate-configuration-3.0.dtd"> <hibernate-configuration>
方法二:为 SAXBuilder 对象设置一个返回 new InputSource(new StringReader("")) 的 EntityResolver ,这样加载的时候就不进行DTD验证了,但要自己保证 XML 的合法性。
Document document=null;
SAXBuilder bSAX=new SAXBuilder(false);
bSAX.setEntityResolver(new EntityResolver(){
public InputSource resolveEntity(String publicId, String systemId) {
return new InputSource(new StringReader(""));
}
});
try{
document=bSAX.build(youFileInputstream);
}catch(Exception e){
e.printStackTrace();
}