我有一个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/

10-09 21:30