Javax:在将fo文件转换为pdf时未调用ErrorListener

时间:2013-07-07 21:33:49

标签: java xslt error-handling saxon apache-fop

我正在开发一个使用Apache FOP的Servlet。

输入.fo文件将转换为PDF文件。一些输入文件引用 外部图像;如果这些不可用,变压器给出 像这样的消息:

07.07.2013 22:53:01 org.apache.fop.fo.flow.ExternalGraphic bind
SCHWERWIEGEND: Image not available: sunset.jpg

为了处理这种情况,我实现了一个ErrorListener:

import javax.xml.transform.ErrorListener;

class MyErrorListener implements ErrorListener {
    int warnings;
    int fatals;
    int errors;
    StringBuilder sb = new StringBuilder();

    @Override
    public void warning(TransformerException e) throws TransformerException {
        warnings++;
        sb.append(e.getMessageAndLocation() + "\n");;
    }

    @Override
    public void fatalError(TransformerException e)
            throws TransformerException {
        fatals++;
        sb.append(e.getMessageAndLocation() + "\n");;
    }

    @Override
    public void error(TransformerException e) throws TransformerException {
        errors++;
        sb.append(e.getMessageAndLocation() + "\n");;
    }

    String getMessages() {
        return sb.toString();
    }
}

在转换开始之前,此类的一个实例附加到变换器:

TransformerFactory tFactory = TransformerFactory.newInstance();
transformer = tFactory.newTransformer();
MyErrorListener el = new MyErrorListener();
transformer.setErrorListener(el);
transformer.transform(new StreamSource(tempFile2),
    new SAXResult(fop.getDefaultHandler()));

但不是调用任何已实现的错误,警告或fatalError方法 在监听器中,变换器继续向stderr报告错误。

我甚至试图将听众附加到工厂:

tFactory.setErrorListener(el);

但没有成功。

知道我的代码有什么问题吗?或者是报告级别以下的缺失图像?

1 个答案:

答案 0 :(得分:0)

错误来自XSL-FO处理器,而不是XSLT处理器。 Saxon知道你的ErrorListener,但它不知道错误。 FOP知道错误,但它不知道ErrorListener。