java xml中classpath_java – 在build.xml中设置ANT CLASSPATH

本文描述了Schematron任务中遇到的一个错误,该错误涉及到Ant任务如何加载SaxonXSLT处理器。详细解释了问题的原因在于动态查找正确的TransformerFactory实现时出现的问题,并提供了解决方案。

这似乎是Schematron任务中的一个错误. Ant任务加载Saxon XSLT处理器的方式要求Saxon在系统类路径上,即使任务本身位于子类加载器上也是如此.

private TransformerFactory _factory = TransformerFactoryImpl.newInstance();

(其中TransformerFactoryImpl是Saxon的TransformerFactory实现),但实际上TransformerFactoryImpl没有定义自己的newInstance()方法,因此这是TransformerFactory的继承newInstance,它将根据javax的值查找合适的工厂. xml.transform.TransformerFactory系统属性. Ant任务does set this system property:

System.setProperty("javax.xml.transform.TransformerFactory",

"net.sf.saxon.TransformerFactoryImpl");

但是TransformerFactory.newInstance()将在系统类加载器上查找此类,而不必在加载schematron任务的类加载器上查找.

修复方法是将ValidatorFactory第120行简单地更改为

private TransformerFactory _factory = new TransformerFactoryImpl();

这将绕过所有动态查找并直接实例化正确的类.有了这个修复就位

classname="com.schematron.ant.SchematronTask"

classpath="lib/ant-schematron.jar:lib/saxon9he.jar"/>

会正常工作.

我建议你向开发人员报告这个bug,但是项目看起来并不特别活跃,所以你可能只需构建自己的本地fork而不是……

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值