最近,我在用SAXBuilder将字符串解析为Document对象时发现,如果字符串中包含外部DTD,SAX会去访问URL加载此DTD。这样很容易产生连接超时的异常java.net.ConnectException: Connection。
SAXBuilder saxBuilder = new SAXBuilder();
saxBuilder.setIgnoringElementContentWhitespace(false);
Document doc = saxBuilder.build(new java.io.StringReader(str));
可以添加下面的代码,禁用外部DTD加载:
//禁用外部 DTD 加载,以防止发生连接超时的异常
saxBuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);