Saxon EE处理器XSLT-2.0样式表编译报错求助
Saxon EE XSLT 2.0编译错误排查
核心问题分析
当前报错仅提示"样式表编译期间报告错误",但未给出具体错误细节,这是排查的关键障碍。Saxon在编译XSLT时会生成详细的错误信息(如语法错误、扩展函数问题、特性兼容性问题等),需要先获取这些信息才能精准定位问题。
具体排查步骤
1. 获取详细编译错误信息
修改Java代码,添加自定义ErrorListener来捕获并打印所有编译阶段的错误和警告:
ProfessionalTransformerFactory tFactory = new ProfessionalTransformerFactory(); // 添加错误监听器 tFactory.setErrorListener(new ErrorListener() { @Override public void warning(TransformerException exception) throws TransformerException { System.err.println("编译警告: " + exception.getMessage()); exception.printStackTrace(); } @Override public void error(TransformerException exception) throws TransformerException { System.err.println("编译错误: " + exception.getMessage()); exception.printStackTrace(); } @Override public void fatalError(TransformerException exception) throws TransformerException { System.err.println("致命编译错误: " + exception.getMessage()); exception.printStackTrace(); } }); // 原有的配置代码 Configuration saxonConfig = tFactory.getConfiguration(); JavaExtensionLibrary javaLib = new JavaExtensionLibrary( (ProfessionalConfiguration) saxonConfig ); javaLib.declareJavaClass( "http://com.teamcenter.rac.cme.cmereport/CMEReportXalanExtension", CMEReportXalanExtension.class ); ( (ProfessionalConfiguration) saxonConfig ).setExtensionBinder( "java", javaLib ); XslImportResolver myResolve = new XslImportResolver(); tFactory.setURIResolver( myResolve ); try { javax.xml.transform.Transformer transformer = tFactory.newTransformer( new javax.xml.transform.stream.StreamSource(xslLocation)); // 后续代码... } catch (TransformerException e) { System.err.println("转换初始化失败: " + e.getMessage()); e.printStackTrace(); }
运行修改后的代码,即可看到具体的编译错误详情。
2. 检查XSL文件潜在问题
基于现有代码,重点排查以下几点:
- 扩展函数兼容性:XSL中使用的
setfile:getCurrentDir(setfile:new())依赖CMEReportXalanExtension类,需确认:- 该类存在
public无参构造方法(对应setfile:new()); - 存在
public的getCurrentDir()方法,参数和返回值类型符合调用要求; - 命名空间
http://com.teamcenter.rac.cme.cmereport/CMEReportXalanExtension与Java代码中绑定的完全一致。
- 该类存在
- XSLT 2.0特性支持:
xsl:result-document是XSLT 2.0特性,Saxon EE原生支持,但需确保XSL文件开头的版本声明version="2.0"正确无误。 - 语法正确性:检查XSL文件中所有标签是否闭合,属性引用是否符合XML规范(如引号配对)。
3. 其他排查方向
- 确认Saxon EE版本是否为支持XSLT 2.0的稳定版本,避免使用过于老旧的版本;
- 检查XSL文件路径是否正确,确保
xslLocation指向的文件存在且可读取; - 若使用了自定义
URIResolver,需确认其能正确解析XSL中的导入/包含语句(如果有的话)。
内容的提问来源于stack exchange,提问作者ashish sharma
相关产品推荐
相关产品推荐

