2

Xalanを使用してXSLTスタイルシートを処理しているときに奇妙な例外が発生するJavaプログラム(今のところJDK 1.5で実行)があります。私は例外を修正する方法を探していません:それについてオンラインでたくさんの情報があります。コードで例外をキャプチャする方法を知りたいだけです。

    try {
        TransformerFactory tf = TransformerFactory.newInstance();
        Source src = new SAXSource(new InputSource(new FileInputStream("doc.xsl")));
        Transformer t = tf.newTransformer(src);
        System.out.println(t);
    } catch (TransformerConfigurationException e) {
        System.out.println("the exception was " + e + " and its cause is " + e.getCause());
    }

および出力:

com.sun.org.apache.bcel.internal.generic.ClassGenException: Branch target offset too large for short
at com.sun.org.apache.bcel.internal.generic.BranchInstruction.dump(BranchInstruction.java:99)
at com.sun.org.apache.bcel.internal.generic.InstructionList.getByteCode(InstructionList.java:980)
at com.sun.org.apache.bcel.internal.generic.MethodGen.getMethod(MethodGen.java:616)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileNamedTemplate(Mode.java:556)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileTemplates(Mode.java:566)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileApplyTemplates(Mode.java:818)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.compileModes(Stylesheet.java:615)
at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.translate(Stylesheet.java:730)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:354)
at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:429)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:792)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:614)
at main.Main.main(Main.java:61)
ERROR:  'Branch target offset too large for short'
FATAL ERROR:  'Could not compile stylesheet'
the exception was javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet and its cause is null

私がやりたいのはClassGenException、コード内の内部例外---をキャプチャすることです。上記のようにSTDERRに出力するだけでは、私のアプリケーションでは役に立ちません。それを行う方法はありますか?

4

1 に答える 1

3

TransformerFactoryにErrorListenerを設定しようとしましたか?

    tf.setErrorListener(new ErrorListener() {

        @Override
        public void warning(TransformerException exception) throws TransformerException {
            ...
        }

        @Override
        public void fatalError(TransformerException exception) throws TransformerException {
            ...

        }

        @Override
        public void error(TransformerException exception) throws TransformerException {
            ...

        }
    });

ClassGenExceptionは、を介して利用できる場合がありますexception.getCause()

于 2010-11-09T16:04:13.473 に答える