我有一个Java XSLT转换程序(实际上是Apache FOP转换为PDF),其中我已经设置了一个自定义URIResolver(用于“ servlet-context:” URI)。
现在,我需要另外使用另一个URIResolver(用于缓存DTD的CatalogResolver)。
我现在需要编写自己的URIResolver来调用二者之一,还是有更好的方法来做到这一点?
最佳答案
URIResolver
在无法解析引用时应返回null
。这允许基础解析器尝试。
如果您设计解析器,以便在构造时将另一个URIResolver
作为参数,则可以使用解析器链接。
TransformerFactory tf;
tf.setURIResolver(new SomeOtherResolver());
tf.setURIResolver(new MyResolver(tf.getURIResolver());
public class MyResolver implements URIResolver {
public MyResolver(URIResolver nextInLine) {
this.nextInLine = nextInLine;
}
private URIResolver nextInLine;
public Source resolve(String href, String base) throws TransformerException {
...try to solve and return Source object...
return nextInLine; // instead of returning null on failure, return nextInLine
}
}
一种替代方法是编写一个解析程序,该解析程序允许您将一系列解析程序设置为列表,并将一直调用它们,直到返回非
null
答案,然后再返回。关于java - TransformerFactory上有多个URIResolver?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1068689/