`

Java解析xml禁止校验dtd

    博客分类:
  • Java
阅读更多

今天在做log4j.xml解析的时候,指定了如下的dtd声明:

 

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

不过在应用的启动过程中,由于log4j.xml被替换至一个临时目录下,而log4j.dtd没有被跟随拷贝过去,导致解析log4j配置的过程中,抛出了如下的异常信息:

 

2011-04-27 21:27:03.407:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name
.......
java.io.FileNotFoundException: C:\Users\lanbo.xj\AppData\Local\Temp\hsf_jetty_placeholder\log4j.dtd (系统找不到指定的文件。)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
......

当解析xml文件时,如果xml文件中引用了dtd文件,解析的时候读不到这个dtd文件,无论解析是否设置验证,都会抛出这样的异常。

所以想到要在解析xml时,禁止校验DTD文件。

我在参考了

1). xml解析忽略dtd文件

2). java解析xml禁止校验dtd

之后,修改了解析XML的代码,我是用DocumentBuilder做解析的,代码如下:

private Document getDocument(String configFile) throws ParserConfigurationException, SAXException, IOException {
	dbf = DocumentBuilderFactory.newInstance();
	db = dbf.newDocumentBuilder();
	db.setEntityResolver(new IgnoreDTDEntityResolver());
	return db.parse(new File(configFile));
}

class IgnoreDTDEntityResolver implements EntityResolver {
	@Override
	public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
		 return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes())); 
	}
}

 经上述修改后,问题解决。

 

PS:刚了解到一个情况,与上述文章无关,但碍于另写一篇,就放置于此文之后:

 

想了解下log4j中log4j.properties和log4j.xml的加载顺序,经过查看LogManager.java

// if the user has not specified the log4j.configuration
// property, we search first for the file "log4j.xml" and then
// "log4j.properties"

明确了,当用户没有设置log4j.configuration属性,则首先查找log4j.xml,然后查找log4j.properties。

log4j.properties以后已经不再推荐使用了。

 

分享到:
评论

相关推荐

    Java通过XML Schema校验XML

    然后将校验器与SAXReader关联,以便在解析XML文档的同时进行校验。 #### 实现过程 具体的实现步骤如下: 1. **加载XML文件**:使用DOM4j的`SAXReader`读取XML文件。 2. **加载XSD文件**:指定XSD文件路径,作为...

    XML校验工具,可以用来进行XML合法性检验

    ### XML校验工具详解 #### 一、XML与W3C简介 - **XML(Extensible Markup Language)**:一种标记语言,旨在定义一套规则,用于结构化文档中数据的存储和传输。XML的设计目标是尽可能地保持数据的原始性和纯粹性,...

    xml的JAVA解析与格式定义

    例如,你可以使用`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.parsers.DocumentBuilder`创建DOM解析器,然后调用`parse()`方法解析XML文件。DOM解析适用于小型或中型XML文件,因为大型文件可能导致内存...

    castor解析xml与xsd校验xml

    本文将深入探讨如何使用Castor解析XML,并通过XSD(XML Schema Definition)进行XML校验。 ### Castor XML解析 1. **安装与配置**:首先,你需要在项目中引入Castor的依赖库。如果你使用的是Maven,可以在pom.xml...

    DTD验证XML详解

    - **解析器**:XML解析器读取XML文档并根据关联的DTD进行验证,如果发现不符合规则的地方,会报告错误。 4. **使用DTD的好处**: - **一致性**:确保所有符合DTD的XML文档都有相同的结构,方便处理和解析。 - **...

    java开发jar包dtd.zip

    在实际开发中,使用DTD配合Java的XML解析库(如Java的DOM API、SAX API或JAXB)可以实现XML数据的有效处理。例如,当接收到XML数据时,开发者可以利用DTD进行校验,确保数据的完整性和正确性,避免因数据错误导致的...

    xmlValidate.rar

    "xmlValidate.jar" 是一个Java可执行文件,这通常是一个包含XML校验功能的Java应用程序或者库。在Java环境中,你可以通过运行这个JAR文件,将待验证的XML文档和对应的XSD文件作为参数传递,来实现XML的校验。使用...

    JavaXML解析器FastXml.zip

    FastXml类似XMLPULL一样,不校验文档schema和DTD,对文档的格式也不进行非常严格的校验:通常xml文档的格式都是正确的,当我们追求xml解析的最高性能时,就不需要对格式等内容进行及其严格的校验了。FastXml并不...

    自定义MyEclipse的DTD文档校验

    ### 自定义MyEclipse的DTD文档校验:深入解析与实践指南 在软件开发领域,尤其是Java企业级应用开发中,MyEclipse作为一款强大的集成开发环境(IDE),以其丰富的功能和良好的用户体验著称。其中,XML文件的自动...

    Dubbo配置文件依赖的本地DTD

    与DTD相比,XSD支持更复杂的数据类型、命名空间和数据校验规则。 在使用本地DTD的过程中,你需要按照以下步骤操作: 1. 解压"DTD-xsd.zip"文件,将其中的DTD文件(如`dubbo.dtd`)保存到本地目录。 2. 修改Dubbo...

    配置Mybatis_DTD环境

    这样IDE就会在解析Mybatis的XML配置文件时,使用这些DTD来校验文件的格式。 接下来,创建Mybatis的XML配置文件: 1. 右键点击项目中的包,选择“New”然后选择“Other”。 2. 在弹出的对话框中,可以在搜索框中...

    JSON Schema 校验库——json-schema-validator(java版本).rar

    JSON Schema 是一个JSON格式的规范,用于定义JSON数据的结构和限制,类似于XML Schema和DTD(文档类型定义)。它提供了一种验证JSON数据是否符合预定义规则的方法,这对于API开发、数据交换和JSON数据存储非常有用。...

    XML技术及GML简介

    XML编程涉及使用编程语言(如Java、Python、C#等)处理XML文档,包括解析XML、创建XML、验证XML、转换XML以及操作XML数据。许多编程库和API(如DOM、SAX、StAX)都支持XML处理。 XML在各种应用场景中发挥着重要作用...

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    jdbc和xml的资料文档

    5. 解析:解析XML文档有两种方式,DOM(文档对象模型)一次性加载整个文档到内存,而SAX(简单API for XML)采用事件驱动的方式,按需处理。 压缩包内的文件可能包含关于JDBC和XML的教程、示例和参考资料。例如,...

    javaweb学习总结

    Java 中可以使用 DOM 解析器来解析 XML 文档,例如,使用 ActiveXObject("Microsoft.XMLDOM") 创建一个 XML 文档解析器对象,开启 XML 校验,装载 XML 文档,然后获取错误信息。 Java 基础增强是指 Java 语言的基础...

    张龙 sax解析课堂笔记

    - **不校验的解析器:**仅负责解析XML文档结构,不对文档的有效性进行校验,通常效率更高。 - **支持DOM的解析器:**虽然主要关注DOM模型,但也可以支持SAX接口。 - **支持SAX的解析器:**专注于SAX接口,是当前的...

    自动生成xsd所需的jar包

    这个过程通常涉及到一些工具,如`trang.jar`,这是一个名为TRANG的转换工具,它由Igalia公司开发,用于转换XML模式定义(如DTD、RELAX NG或W3C XML Schema)。 在描述中提到的命令`java -jar trang.jar a.xml a.xsd...

    xmlToByteArray

    因此,确保在解析XML时开启相关的安全配置,如禁用DTD(Document Type Definition)和实体扩展,以降低风险。 6. **应用场景**:将XML转换为字节数组的场景广泛,如在网络上传输XML数据,可以减少传输量;在存储XML...

    XMLParseToTree:带有 GUI 的 XML 解析器,然后将其转换为树

    This is a Java Project used to parse XML files ( and probably ...一个用来将xml文件(和DTD文件,可选)可视化的工具,也就是将提供的XML文件转化为树的形式,同时提供XML校验机制(也就是当XML出现错误时,告知错误

Global site tag (gtag.js) - Google Analytics