私はにXSLT
基づいて以下を持っていXalan
ます:
TransformerFactory factory = TransformerFactory.newInstance();
XalanErrorListener listener = new XalanErrorListener();
factory.setErrorListener(listener);
// Create transformer
StreamSource config = new StreamSource(xslPath);
Transformer transformer = factory.newTransformer(config);
// Create input / ouput
StreamSource source = new StreamSource(inputPath);
StreamResult result = new StreamResult(outputPath);
// Transform
transformer.transform(source, result);
クラスの、およびメソッドをXalanErrorListener
単純にオーバーライドし、例外をログに記録します。error
fatalError
warning
javax.xml.transform.ErrorListener
public final class XalanErrorListener implements ErrorListener {
static final Logger LOGGER = LoggerFactory.getLogger(XalanErrorListener.class);
@Override
public void error(TransformerException exception) throws TransformerException {
LOGGER.error(exception);
}
@Override
public void fatalError(TransformerException exception) throws TransformerException {
LOGGER.error(exception);
}
@Override
public void warning(TransformerException exception) throws TransformerException {
LOGGER.warn(exception);
}
}
しかし、正しくエンコードされていないファイルを実行すると、コンソールに次のメッセージが表示されます。
(Location of error unknown)
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:
Invalid byte 2 of 2-byte UTF-8 sequence.
プログラムは正常に実行されます。例外はスローまたはログに記録されず、生成されたファイルは空です。
例外をキャッチして、希望どおりに処理するにはどうすればよいですか?