私はApache FOPを利用するサーブレットに取り組んでいます。
入力 .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()));
ただし、リスナーの実装された error、warning、または fatalError メソッドを呼び出す代わりに、トランスフォーマーは stderr にエラーを報告し続けます。
リスナーをファクトリーにアタッチしようとさえしました:
tFactory.setErrorListener(el);
しかし、成功しませんでした。
私のコードの何が問題なのですか?それとも、不足している画像はレポート レベルより下ですか?