dom4j 解析报错java.net.UnknownHostException:java.sun.com
问题现象:
在开发中使用到了dom4j去解析一个xml格式的文件,代码中使用到了SAXReader进行转换。
在本机电脑测试运行时,没有任何问题,当放在服务器时,报错:
java.net.UnknownHostException:java.sun.com
问题代码:
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
//获取根节点 properties
Element root = doc.getRootElement();
原因:
1、根本原因:
因为SAXReader需要下载外部的dtd文件对xml验证
2、项目原因:
因为部署的服务器不能联网
解决办法:(两种解决思路,建议使用第二种)
1、去掉xml文件中的doctype或者将doctype中指定的互联网dtd文件改为引用本地dtd文件。
doctype的在xml文件中开头位置,如下:
*根据实际情况进行修改,此处未修改 *
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
但是这种办法会需要修改xml文件,大部分实际项目这种做法并不允许
2、对dom4j的SAXReader进行设置,不去下载外部dtd文件来对xml进行验证
SAXReader reader = new SAXReader();
//以下两行代码,是对dom4j的SAXReader进行设置,不去下载外部dtd文件来对xml进行验证
//SAXReader需要下载外部的dtd文件对xml验证,当服务器不能链接外网时,会报错
//这里将验证关闭
reader.setValidation(false);
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Document doc = reader.read(f);
//获取根节点 properties
Element root = doc.getRootElement();
参考文章:
https://blog.csdn.net/youlianying/article/details/5908335
https://www.iteye.com/blog/pengfeng-819827