将CatalogResolver与StAX一起使用

时间:2016-02-04 07:32:16

标签: java stax catalog xml-dtd

我使用此处提供的方法: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

1 个答案:

答案 0 :(得分:0)

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

但是XMLInputFactory期望javax.xml.stream.XMLResolver是一个不同的界面。

您可以简单地包装CatalogResolver:

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