java - 将 CatalogResolver 与 StAX 结合使用

标签 java stax catalog dtd xml

我正在使用此处提供的方法:http://xerces.apache.org/xml-commons/components/resolver/resolver-article.html

这是我使用 StAX 的 XML 解析代码

XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_VALIDATING, "true");
CatalogResolver cr = new CatalogResolver();
factory.setXMLResolver(cr);
XMLEventReader eventReader =
    factory.createXMLEventReader(new InputStreamReader(
        httpResp.getEntity().getContent()));

但是,我无法将 CatalogResolver 参数传递给 setXMLResolver()。 当我尝试将其转换为 XMLResolver 时,我收到转换异常。

我是不是错过了什么?我还可以通过什么其他方式提供 CatalogResolver

最佳答案

org.apache.xml.resolver.tools.CatalogResolver 实现 org.xml.sax.EntityResolver,因此可以用作 SAX XML 解析器的解析器。

但是 XMLInputFactory 需要一个 javax.xml.stream.XMLResolver 这是一个不同的接口(interface)。

您可以简单地包装您的 CatalogResolver:

CatalogResolver catResolver = null;
XMLResolver xmlResolver = (p,s,b,n) -> { try {
        return catResolver.resolveEntity(p,s);
    }
    catch (Exception e) {
        throw new XMLStreamException(e);
    }
};

关于java - 将 CatalogResolver 与 StAX 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35195042/

相关文章:

Java 斯塔克斯 : Invalid byte 2 of 3-byte UTF-8 sequence

java - 未捕获异常时的 Tomcat HttpThread 池异常处理

java - InDesign Server (5.5),pdf 预设似乎不起作用

java - 停止 stax 解析器执行

java - 为什么 XMLStreamReader/StAXSource 从 XML 中去除注释?

php产品浏览器

variables - 是否有变量命名约定的简明目录?

unix - 为 db2 客户端中的数据库指定默认模式

java - 使用 Jackson 的 CSV 数据格式模块解析 CSV 文件时出现 CharConversionException

java - Spring/Java 从一个方法调用变量作为变量