我正在使用此处提供的方法: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,这是一个不同的接口。

您可以简单地包装CatalogResolver:

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

10-05 21:51