pAk*_*Y88 20 java tomcat servlets sax xslt-2.0
在我的Web应用程序中,我需要使用Saxon TransformerFactory才能使用XSLT 2.0,但我无法使用setProperty方法,因为我在Web服务器上没有这个权限并且有一个安全管理器.
所以我读过应该可以这样做:
如果可用,请使用Services API(如JAR规范中所述)来确定类名.Services API将在运行时可用的jar文件中的META-INF/services/javax.xml.transform.TransformerFactory文件中查找类名.
我在WEB-INF/lib/saxon9.jar中找到了这个文件但是当我实现TransformerFactory时,总是选择默认工厂而不是Saxon工厂.
我如何选择Saxon Transformer Factory?
谢谢
And*_*w B 25
正确的方法是在获取新的TransformerFactory时指定工厂类.
我不认为调用特定的工厂实现会起作用 - 我相信默认的系统变换器可能仍然会被返回(至少那就是当我在类路径中有xalan和saxon时发生的事情).
例:
TransformerFactory tFactory = TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl",null);
Run Code Online (Sandbox Code Playgroud)
或撒克逊人
TransformerFactory tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
Run Code Online (Sandbox Code Playgroud)
的Javadoc:
从工厂类名称获取TransformerFactory的新实例.当类路径中有多个提供程序时,此函数很有用.它为应用程序提供了更多控制,因为它可以指定应该加载哪个提供程序.一旦应用程序获得对TransformerFactory的引用,它就可以使用工厂来配置和获取转换器实例.
Jos*_*seK 11
你能尝试在你的代码中设置系统属性吗?
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
Run Code Online (Sandbox Code Playgroud)
在获取TransformerFactory的实例之前执行此操作.
注意:这将强制Tomcat上的所有Web应用程序使用saxon - 因此您必须确保使用默认值的任何其他Web应用程序都可以.
创建META-INF/services/javax.xml.transform.TransformerFactory包含内容的文件:net.sf.saxon.TransformerFactoryImpl.而已.
如果您的应用程序确实需要saxon并且不能与其他处理器一起使用,那么直接使用saxon TransformerFactory进行实例化可能会很好 new net.sf.saxon.TransformerFactoryImpl()
| 归档时间: |
|
| 查看次数: |
22922 次 |
| 最近记录: |