最近使用apache的common configuraton组件解析XML出现连接出错问题,经过检查发现是由于每次解析都需要下载dtd,而这边网络又存在问题所以引起的,结果就是异常如下
org.apache.commons.configuration.ConfigurationException: Connection timed out: connect
at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:539)
at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:497)
at org.apache.commons.configuration.XMLConfiguration$XMLFileConfigurationDelegate.load(XMLConfiguration.java:921)
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:275)
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:207)
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:185)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load
....
查看帮助XMLConfiguration具备setValidating方法设置为不校验setValidating(false); 再次运行发现还是需要下载,同样的错误,看来要寻找其他的方法了
检查了一下XMLConfiguration的源代码,发现protected DocumentBuilder createDocumentBuilder()方法用于构造DocumentBuilder,可以实现一个不访问网络的DocumentBuilder,只需要修改这个方法的实现,替换dtd的uri为本地就可以了
扩展了一个自己的XMLConfiguration,将dtd文件放在本地classes的根目录下,使用此解析器解析XML,经过测试,成功,代码如下
public class MyXMLConfiguration extends XMLConfiguration {
private final static String registrations[] = {
"-//SPRING//DTD BEAN 2.0//EN",
"/spring-beans-2.0.dtd" };
protected DocumentBuilder createDocumentBuilder()
throws ParserConfigurationException {
if (getDocumentBuilder() != null) {
return getDocumentBuilder();
} else {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
factory.setValidating(isValidating());
DocumentBuilder result = factory.newDocumentBuilder();
result.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException, IOException {
for (int i = 0; i < registrations.length; i += 2) {
if (publicId.equals(registrations[i])) {
String dtd_uri = registrations[i + 1];
InputStream dtd_stream = this.getClass()
.getResourceAsStream(dtd_uri);
return new InputSource(dtd_stream);
}
}
return null;
}
});
if (isValidating())
{
// register an error handler which detects validation errors
result.setErrorHandler(new DefaultHandler()
{
public void error(SAXParseException ex) throws SAXException
{
throw ex;
}
});
}
return result;
}
}
}
分享到:
相关推荐
### Struts-config1.1.xml 文件解析 #### 文件概述 `struts-config1.1.xml` 是 Apache Struts 框架中一个重要的配置文件,它用于定义应用程序的行为、组件和资源。Struts 是一种基于 Model-View-Controller (MVC) ...
"解析Tomcat下应用JMS开发技巧" 本篇文章主要讲述了在Tomcat下应用JMS开发的技巧和实现方法。首先,文章指出JMS作为J2EE的高级部分一直蒙着一层神秘的面纱,虽然SUN只规定了JMS规范,但是很多厂商提供了具体的实现...
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <result name="success">/WEB-INF/page/hello.jsp ``` 为了支持Struts2配置...
1. **配置SpringMVC**:在`applicationContext.xml`中添加自动扫描控制器、视图解析器以及启用注解支持。 ```xml ``` 2. **配置web.xml**:配置DispatcherServlet并设置监听器。 ```xml <?xml ...
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <result name="error">/error.jsp <result>/loginResult.jsp ...
DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <!-- 定义表单Bean --> 的类全名"/> ...
DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> ``` - 在`struts.xml`文件中配置Action类,定义业务逻辑的执行...
DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> ``` 配置Struts2 Filter以启动框架,在`web.xml`中添加如下...
- `dom4j-1.6.1.jar`:XML 解析工具。 - `javassist-3.9.0.jar`:动态字节码生成工具。 - `jta-1.1.jar`:支持事务管理。 - `slf4j.api-1.5.8.jar` 和 `slf4j-nop-1.5.8.jar`:日志框架接口及其无操作实现。 ...
"mapping和configuration的dtd文件"则是Hibernate配置和映射文件的定义,它们定义了XML文件的结构,这些文件通常用于描述对象如何映射到数据库表以及 Hibernate 如何配置。 在提供的文件列表中,我们看到以下几个...
Struts是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它可以帮助开发者构建可扩展、结构清晰的应用系统。Struts提供了丰富的功能来支持国际化(Internationalization, i18n),即在应用程序中...
Struts是一个开源的MVC(Model-View-Controller)框架,它简化了Java Web应用的开发过程,并且支持多种功能,包括表单验证、国际化等。对于需要支持多语言的应用场景来说,Struts提供了非常方便的国际化支持。 ####...
SSH整合是指将Struts2、Hibernate和Spring这三个开源框架整合在一起,以实现更高效、灵活的Web应用开发。下面将详细介绍SSH整合的过程。 一、导包 SSH整合首先需要引入相应的依赖库。对于Struts2,我们需要的包包括...
- `commons-digester.jar`:用于解析配置文件。 - `commons-fileupload.jar`:用于实现文件上传功能。 - `commons-logging.jar`:提供日志处理能力。 - `commons-beanutils.jar`:简化了POJO的属性赋值和拷贝...
DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <!-- Action配置及其他Struts2相关配置在此处进行 --> ``` 5...