首页 > 解决方案 > 使用 Java 1.8.0_251 转换 XSL 时出现致命错误

问题描述

尝试转换样式表时,我从 Java 1.8.0_251 收到以下错误。然而,Java 1.8.0_241 同样的样式表转换没有任何问题。当行 tFactory.newTransformer(stylesheet); 时出现错误 被执行。

也使用 xalan 2.7.2 而不是 Java 1.8.0._251 也可以,但是那个版本的 os xalan 真的很旧。

有没有人遇到过这样的事情?如果有怎么解决?

SimpleNotWorking04.xsl https://drive.google.com/file/d/1pUiMvVtVBmBvCwfPXNW__pXVCiS4c3RV/view?usp=sharing

SimpleWorking04.xsl https://drive.google.com/file/d/1OsOflQzGErvVFVsrmriqa0gbODS2OWi5/view?usp=sharing

如果您对上述两个文件进行比较,它只是添加到 SimpleNotWorking04.xsl 的一个空行,它会给出此错误。

注意“不定位”后面的数字(例如,不定位 10980:)将根据 XSL 内容而变化。

com.sun.org.apache.bcel.internal.generic.ClassGenException: Not   
targeting 10980: nop[0](1), but null ERROR:Not targeting 10980:   
nop[0](1), but null

 at    com.sun.org.apache.bcel.internal.generic.BranchInstruction.updateTarget(BranchInstruction.java:217)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator.outline(MethodGenerator.java:1738)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator.outlineChunks(MethodGenerator.java:1169)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator.getGeneratedMethods(MethodGenerator.java:1899)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator.addMethod(ClassGenerator.java:137)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.Mode.compileNamedTemplate(Mode.java:557)
 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:825)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.compileModes(Stylesheet.java:622)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.translate(Stylesheet.java:735)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:478)
 at    com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:553)
 at    com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:947)
 at    com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:761)
 at simpletest.SimpleTest.main(SimpleTest.java:24) ERROR:  'Could not      compile stylesheet' FATAL ERROR:  'Not targeting 10980:
nop[0](1), but     null'
           :Not targeting 10980: nop[0](1), but null

代码很简单,如下所示。

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.TransformerConfigurationException;
import java.io.File;

public class SimpleTest {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
      try{
         StreamSource stylesheet = new StreamSource(new File("SimpleNotWorking04.xsl"));
         TransformerFactory tFactory =TransformerFactory.newInstance();  
         Transformer transformer = tFactory.newTransformer(stylesheet);
      }
      catch(TransformerConfigurationException tce) {
          System.out.println("ERROR:"+tce.getMessage());
      }
      catch(Exception e){
         System.out.println("ERROR:"+e.getMessage());
      }
      catch(Throwable t){
         System.out.println("ERROR:"+t.getMessage());
      }
      System.out.println("Done transformation!!");
   }

}

标签: javaxsltxslt-1.0xsl-foxalan

解决方案


这是 Java 8 251 版本中的一个错误。在向 Oracle 报告后,它已修复并随 Java 8 271 2020 年 10 月版本一起发布。


推荐阅读