Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javax:ErrorListener在将fo文件转换为pdf时未调用_Java_Xslt_Error Handling_Saxon_Apache Fop - Fatal编程技术网

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

Javax:ErrorListener在将fo文件转换为pdf时未调用,java,xslt,error-handling,saxon,apache-fop,Java,Xslt,Error Handling,Saxon,Apache Fop,我正在开发一个利用ApacheFop的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.E

我正在开发一个利用ApacheFop的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);
但是没有成功


知道我的代码有什么问题吗?还是缺少的映像低于报告级别?

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

我明白了。基于这一新见解,我找到了一个解决方案:1。实现org.apache.fop.events.EventListener 2。将其连接到FousAgent事件广播程序,如下所示:FousAgent.getEventBroadcaster().addEventListener(fel);