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