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

来源:互联网 发布:塔吊考试模拟考试软件 编辑:程序博客网 时间:2024/05/01 05:56

struts2的配置文件的stru.xml的dtd定义是如下这样
1.<!DOCTYPE struts PUBLIC "-
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秒的时间

原创粉丝点击