我正在使用此处提供的方法: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);
}
};