1.出现的问题
最近在使用dom4j解析XML文件出现:org.dom4j.DocumentException: Connection reset Nested exception: Connection reset
2.出现问题详情
2.1解析的xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">```
<configuration>
<properties resource="jdbc.properties">
</properties>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql://localhost:3306/mybatistest"/>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers >
<mapper resource="com/sofwin/dao/IUserDao.xml"/>
</mappers>
</configuration>
2.2解析xml的代码
//mybatis.xml文件是放在resources目录之下,是可以读取到的
InputStream resourceAsStream = test.class.getClassLoader().getResourceAsStream("mybatis.xml");
System.out.println("resourceAsStream:"+resourceAsStream);
SAXReader reader=new SAXReader();
Document document= null;
try {
//出现错误的位置:Connection reset Nested exception: Connection reset
document = reader.read(resourceAsStream);
} catch (DocumentException e) {
e.printStackTrace();
}
Element rootElement = document.getRootElement();
List<Element> propertyElements = rootElement.selectNodes("//property");
propertyElements.stream().forEach(l->{
System.out.println(l.attributeValue("name"));
System.out.println(l.attributeValue("value"));
});
2.3出现的原因
执行:document = reader.read(resourceAsStream);的时候出现错误:Connection reset Nested exception: Connection reset.
- 是网络的问题.由于DOCTYPE的链接不一样形成的.
- 使用了saxreader解析器的时候,会自动解析DOCTYPE里面的内容.若是链接不上网络,则会报链接超时的异常.
2.4解决的措施
(不加载dtd文件,false); 就不会去解析DOCTYPE了
mybatis.xml文件修改为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//false"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
其中false就是不加载dtd文件。
2.5其他的解决措施
SAXReader reader = new SAXReader();
reader.setFeature("http://mybatis.org/dtd/mybatis-3-config.dtd", false);