`
pconline900
  • 浏览: 29082 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

让commons configuration开源组件解析XML拒绝下载DTD

    博客分类:
  • Java
阅读更多

最近使用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;   
  }
 }

}

 

1
1
分享到:
评论

相关推荐

    struts-config1.1.xml

    ### Struts-config1.1.xml 文件解析 #### 文件概述 `struts-config1.1.xml` 是 Apache Struts 框架中一个重要的配置文件,它用于定义应用程序的行为、组件和资源。Struts 是一种基于 Model-View-Controller (MVC) ...

    解析Tomcat下应用JMS开发技巧

    "解析Tomcat下应用JMS开发技巧" 本篇文章主要讲述了在Tomcat下应用JMS开发的技巧和实现方法。首先,文章指出JMS作为J2EE的高级部分一直蒙着一层神秘的面纱,虽然SUN只规定了JMS规范,但是很多厂商提供了具体的实现...

    Struts2开发资料

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; &lt;result name="success"&gt;/WEB-INF/page/hello.jsp ``` 为了支持Struts2配置...

    spring+hibernate+struts2 +mybatis整合笔记

    1. **配置SpringMVC**:在`applicationContext.xml`中添加自动扫描控制器、视图解析器以及启用注解支持。 ```xml ``` 2. **配置web.xml**:配置DispatcherServlet并设置监听器。 ```xml &lt;?xml ...

    Struts2的配置

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"&gt; &lt;result name="error"&gt;/error.jsp &lt;result&gt;/loginResult.jsp ...

    struts基本知识介绍

    DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"&gt; &lt;!-- 定义表单Bean --&gt; 的类全名"/&gt; ...

    struts2学习笔记.doc

    DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; ``` - 在`struts.xml`文件中配置Action类,定义业务逻辑的执行...

    集合 struts2+spring+hibernate

    DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; ``` 配置Struts2 Filter以启动框架,在`web.xml`中添加如下...

    hibernate 笔记

    - `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`:日志框架接口及其无操作实现。 ...

    hibernate类库

    "mapping和configuration的dtd文件"则是Hibernate配置和映射文件的定义,它们定义了XML文件的结构,这些文件通常用于描述对象如何映射到数据库表以及 Hibernate 如何配置。 在提供的文件列表中,我们看到以下几个...

    struts国际化程序尝试

    Struts是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它可以帮助开发者构建可扩展、结构清晰的应用系统。Struts提供了丰富的功能来支持国际化(Internationalization, i18n),即在应用程序中...

    struts国际化的使用

    Struts是一个开源的MVC(Model-View-Controller)框架,它简化了Java Web应用的开发过程,并且支持多种功能,包括表单验证、国际化等。对于需要支持多语言的应用场景来说,Struts提供了非常方便的国际化支持。 ####...

    SSH整合过程详解

    SSH整合是指将Struts2、Hibernate和Spring这三个开源框架整合在一起,以实现更高效、灵活的Web应用开发。下面将详细介绍SSH整合的过程。 一、导包 SSH整合首先需要引入相应的依赖库。对于Struts2,我们需要的包包括...

    Struts1.x.pdf

    - `commons-digester.jar`:用于解析配置文件。 - `commons-fileupload.jar`:用于实现文件上传功能。 - `commons-logging.jar`:提供日志处理能力。 - `commons-beanutils.jar`:简化了POJO的属性赋值和拷贝...

    图解整合SSH,更清晰

    DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; &lt;!-- Action配置及其他Struts2相关配置在此处进行 --&gt; ``` 5...

Global site tag (gtag.js) - Google Analytics