断开网络dom4j无法解析有网络dtd的xml文件的解决办法

struts2的配置文件的stru.xml的dtd定义是如下这样
1.2.//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
3."http://struts.apache.org/dtds/struts-2.0.dtd" > 使用dom4j解析含有这样dtd的xml文件时,它会从网络找到这个文件对xml文件进行校验。但是如果电脑断开网络的话就会出现错误说找不到dtd文件并解析失败。


解决的办法一就是解析的时候把上边那句从xml文件中删除或改成本地dtd(struts2的分发包里有这个dtd文件)。删除不太好,之后还得加上。改成本地文件可以,就是麻烦了点,还要是有多个配置文件就更麻烦了。下边就是最简单的解决办法,在dom4j的SAXReader读取xml文件时加上如下一句话
1. public static Document getDoc(String file) throws Exception {
2. SAXReader saxReader = new SAXReader();
3. //加上这句4. saxReader.setEntityResolver(new MyEntityResolver());
5. return saxReader.read(new File(file));
6. }
MyEntityResolver这个是自定义的类
1.import java.io.*;
2.import org.xml.sax.InputSource;
3.import org.xml.sax.EntityResolver;
4.5.public class MyEntityResolver implements EntityResolver {
6.7. public InputSource resolveEntity(String publicId, String systemId) {
8. return new InputSource(new StringBufferInputStream(""));
9. }
10.}
这样就行了,而且由于不用去网络上获取dtd,节省了5~6秒的时间

你可能感兴趣的:(断开网络dom4j无法解析有网络dtd的xml文件的解决办法)