我有一个Java中的XSLT Transformer(实际上它的Apache FOP呈现为PDF),我已经设置了一个自定义URIResolver(用于'servlet-context:'URIs)。
现在我需要另外使用另一个URIResolver(一个用于缓存DTD的CatalogResolver)。
现在我是否需要编写自己的URIResolver来调用其中任何一个或者是否有更好的方法来执行此操作?
答案 0 :(得分:1)
当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
的答案,然后返回它。