今天在做一个web应用部署验证功能。部署的时候需要通过解析其配置文件来得到具体的contextRoot,以此来判断是否和服务器上以存在的应用contextRoot冲突。解析的配置文件的时候,xml中有dtd声明,dom4j读取xml的时候应该是去联网获取dtd了,相应的dtd只在本地存在,所以按照dtd的url会返回404,造成读取xml失败
Nested exception: java.io.FileNotFoundException: http://xxxxx/j2ee/dtds/xxxx.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1194)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:973)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:905)
后来google了一下,这篇文章的方式可以解决
http://blog.csdn.net/luo_yifan/article/details/5904369
主要是设置一下SAXReader的EntityResolver,之后就不会再检查dtd了。
SAXReader saxReader = new SAXReader();
saxReader.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException, IOException {
InputSource is = new InputSource(new StringBufferInputStream(""));
is.setPublicId(publicId);
is.setSystemId(systemId);
return is;
}
});
需要注意的是:
InputSource is = new InputSource(new StringBufferInputStream(""));
这中间的StringBufferInputStream如果换成了自己传过来的inputstream,对于zip文件可能正常解析,对于FileInputStream,直接指向某个xml文件时,会出现IOException:Read error 原因还不清楚
分享到:
相关推荐
在DOM4J解析过程中,如果XML文件包含了如下的DTD声明: ```xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> `...
12. **Node**: 为DOM4J中的所有XML节点提供一个多态接口,包括`Element`、`Attribute`、`Comment`等,简化了节点类型的处理。 13. **NodeFilter**: 定义了节点过滤器的行为,可以在遍历节点时应用条件筛选。 14. **...
DTD 定义 XML DOM4J 解析 XML 小类 XML 文档类型定义(DTD)是用来定义一段合法的 XML 文档块的。它用来验证你的 XML 文档是以一系列合法的元素构成的。DTD 可以在 XML 文档内部定义,也可以通过外部文件的方式引入...
DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。
此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...
DOM4J 1.6.1版的API还包括对XML Schema和DTD的支持,可以处理命名空间,提供事件驱动的处理模型,以及XML文档的序列化功能。这些特性使得DOM4J成为Java开发中处理XML的强大工具。 在实际开发中,DOM4J常用于读取...
在本文中,我们将深入探讨如何使用DOM4J来验证XML文档对DTD(Document Type Definition)的符合性,这是一个确保XML文档结构正确的重要步骤。 首先,我们需要理解DTD的作用。DTD是XML文档类型定义,它定义了XML文档...
总的来说,DOM4J作为Java中处理XML的重要工具,为开发人员提供了高效、灵活的解决方案。它不仅能够处理小规模的XML文件,而且在处理大规模XML时,通过优化的API和内存管理,能够显著提高性能。在实际开发中,掌握DOM...
总的来说,DOM4J是XML处理领域中的一个重要工具,无论是在简单的数据提取还是复杂的文档操作中,都能提供强大而灵活的支持。了解并掌握DOM4J的使用,对于任何涉及XML的Java开发者来说都是非常有价值的技能。
2. **SAX和StAX支持**:除了DOM,DOM4J还支持事件驱动的SAX和流式的StAX解析模型,这些模型在处理大型XML文件时特别有用,因为它们不需要将整个文档加载到内存中。 3. **XPath支持**:DOM4J内置了XPath支持,这使得...
3. **查询XML**:DOM4J支持XPath表达式,可以方便地查找XML中的特定节点。例如,使用`selectNodes()`或`selectSingleNode()`方法: ```java Element root = document.getRootElement(); List<Element> elements =...
org.dom4j.dtd Classes to represent the DTD declarations. org.dom4j.io Provides input and output via SAX and DOM together with writing dom4j objects to streams as XML text. org.dom4j.jaxb org.dom4j....
DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML内容。在Java世界中,DOM4J是继JDOM之后的一个非常受欢迎的选择,它弥补了标准Java DOM API...
7. **XPath支持**:DOM4J支持XPath表达式,教程会讲解如何使用XPath快速定位XML文档中的特定节点。 8. **事件处理**:如果需要在解析或操作XML时执行某些动作,可以注册监听器或处理器,DOM4J提供了相应的API。 9....
在这个场景中,我们将深入探讨DOM4J在解析XML文件方面的应用。 XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于Web服务、配置文件、数据交换等领域。DOM4J作为一个解析器,它的...
5. XPath:DOM4J支持XPath表达式,用于快速定位XML文档中的节点。 三、DOM4J操作XML 1. 解析XML:使用DocumentBuilder解析XML文件,创建Document对象,例如`Document document = DocumentHelper.parseText(xml...
DTD通过声明元素、属性以及它们之间的关系,来确保XML文档的合法性。例如,一个DTD可以规定某个元素必须包含哪些子元素,或者元素是否可以有特定的属性。在"DTD简介.doc"中,你可能能找到关于如何创建和使用DTD的...
此外,DOM4J还支持XML Schema和DTD(文档类型定义),可以进行XML文档的验证,确保其符合预定义的规则。这有助于保证数据的准确性和一致性。 在压缩包中的`dom4j-1.6.1`目录下,通常会包含DOM4J的源代码文件、jar...
此外,DOM4J还提供了对DTD(Document Type Definition)和XML Schema的支持,以验证XML文档的结构正确性。 DOM4J 2.0.3是更新的版本,它可能包含了更多的优化和新特性,比如对Java 8及更高版本的支持,以及性能上的...